Como converter string JSON em array

123

O que eu quero fazer é o seguinte:

  1. tomando JSON como entrada da área de texto em php
  2. use esta entrada e converta-a para JSON e passe-a para php curl para enviar a solicitação.

isso estou chegando no php de get da API essa string json eu quero passar para json, mas não está convertendo para array

echo $str='{
        action : "create",
        record: {
            type: "n$product",
            fields: {
                n$name: "Bread",
                n$price: 2.11
            },
            namespaces: { "my.demo": "n" }
        }
    }';
    $json = json_decode($str, true);

o código acima não está me retornando matriz.

XMen
fonte
1
Você precisa converter json string em array OU deseja criar uma URL a partir desses dados? Qual é exatamente a pergunta?
Janis Veinbergs
then it is not givingNão dando o que? Você pega uma string formatada em JSON da área de texto e a converte em JSON ???
PeeHaa
1
se você fizer o json acima na minha pergunta json_decode (, true) ele retuns um array
XMen
@Pekka Por favor, verifique meu questionário novamente.
XMen 22/09/11
3
problema de json inválido, este foi.
XMen 24/09/11

Respostas:

187

Se você passar o JSON na sua postagem json_decode, ele falhará. Seqüências de caracteres JSON válidas citaram chaves:

json_decode('{foo:"bar"}');         // this fails
json_decode('{"foo":"bar"}', true); // returns array("foo" => "bar")
json_decode('{"foo":"bar"}');       // returns an object, not an array.
RickN
fonte
se você fizer o json acima na minha pergunta json_decode (, true) ele retuns um array
XMen
@RahulMehta Se você estiver usando o PHP embutido, json_decode()ele retornará NULLse o seu JSON for inválido (por exemplo, nenhuma chave entre aspas). É o que a documentação diz e é o que minha instalação do PHP 5.2 retorna. Você está usando uma função diferente da oficial, embutida json_decode()? O que var_dump(json_decode($str, true));retorna?
RickN
após json_encoding, eu gostaria de ler cada objeto json individual, por exemplo, {foo: "bar"} como um objeto na matriz. como posso criar uma matriz a partir dos dados json_encoded para ler cada objeto json? @RikkusRukkus
Manny265 /
@ Manny265 que soa como algo que merece sua própria pergunta com (1) algum código de amostra, (2) o que você tentou até agora e (3) o resultado esperado, em vez desta seção de comentários.
RickN
96

Tente o seguinte:

$data = json_decode($your_json_string, TRUE);

o segundo parâmetro transformará a string json decodificada em matrizes associativas.

sepidol
fonte
30

Se você está recebendo a string JSON do formulário usando $_REQUEST, $_GETou $_POSTo que você vai precisar usar a função html_entity_decode(). Eu não percebi isso até fazer o var_dumpque estava na solicitação versus o que copiei e a echodeclaração e notei que a string da solicitação era muito maior.

Maneira correta:

$jsonText = $_REQUEST['myJSON'];
$decodedText = html_entity_decode($jsonText);
$myArray = json_decode($decodedText, true);

Com erros:

$jsonText = $_REQUEST['myJSON'];
$myArray = json_decode($jsonText, true);
echo json_last_error(); //Returns 4 - Syntax error;
jbeauchamp
fonte
2
Perfeito, isso funciona. quando obtenho dados da função $ _POST, json_last_error () era = para JSON_ERROR_SYNTAX. mas tudo estava bem. Foi um erro de decodificação, não um erro de codificação como ascii ou utf8. GRAÇAS
11

Use a json_decode($json_string, TRUE)função para converter o objeto JSON em uma matriz.

Exemplo:

$json_string   = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

$my_array_data = json_decode($json_string, TRUE);

NOTA: O segundo parâmetro converterá a string JSON decodificada em uma matriz associativa.

===========

Resultado:

var_dump($my_array_data);

array(5) {

    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
Arslan Ramay
fonte
6

Se você estiver obtendo json string da URL usando file_get_contents, siga as etapas:

$url = "http://localhost/rest/users";  //The url from where you are getting the contents
$response = (file_get_contents($url)); //Converting in json string
 $n = strpos($response, "[");
$response = substr_replace($response,"",0,$n+1);
$response = substr_replace($response, "" , -1,1);
print_r(json_decode($response,true));
piyush
fonte
6

sua string deve estar no seguinte formato:

$str = '{"action": "create","record": {"type": "n$product","fields": {"n$name": "Bread","n$price": 2.11},"namespaces": { "my.demo": "n" }}}';
$array = json_decode($str, true);

echo "<pre>";
print_r($array);

Resultado:

Array
 (
    [action] => create
    [record] => Array
        (
            [type] => n$product
            [fields] => Array
                (
                    [n$name] => Bread
                    [n$price] => 2.11
                )

            [namespaces] => Array
                (
                    [my.demo] => n
                )

        )

)
Dinanath Thakur
fonte
2

Você pode converter json Object em Array & String.

$data='{"resultList":[{"id":"1839","displayName":"Analytics","subLine":""},{"id":"1015","displayName":"Automation","subLine":""},{"id":"1084","displayName":"Aviation","subLine":""},{"id":"554","displayName":"Apparel","subLine":""},{"id":"875","displayName":"Aerospace","subLine":""},{"id":"1990","displayName":"Account Reconciliation","subLine":""},{"id":"3657","displayName":"Android","subLine":""},{"id":"1262","displayName":"Apache","subLine":""},{"id":"1440","displayName":"Acting","subLine":""},{"id":"710","displayName":"Aircraft","subLine":""},{"id":"12187","displayName":"AAC","subLine":""}, {"id":"20365","displayName":"AAT","subLine":""}, {"id":"7849","displayName":"AAP","subLine":""}, {"id":"20511","displayName":"AACR2","subLine":""}, {"id":"28585","displayName":"AASHTO","subLine":""}, {"id":"45191","displayName":"AAMS","subLine":""}]}';

$b=json_decode($data);

$i=0;
while($b->{'resultList'}[$i])
{
    print_r($b->{'resultList'}[$i]->{'displayName'});
    echo "<br />";
    $i++;
}
Manav Akela
fonte
1

Se você precisar converter estruturas ou arquivos JSON em matrizes no estilo PHP, com todos os níveis de aninhamento, poderá usar esta função. Primeiro, você deve json_decode ($ yourJSONdata) e depois passá-lo para esta função. Ele exibirá na janela do navegador (ou console) as matrizes com estilo PHP corretas.

https://github.com/mobsted/jsontophparray

Denis Volkov
fonte
1
<?php
$str='{
    "action" : "create",
    "record" : {
                "type": "$product",
                "fields": {
                           "name": "Bread",
                           "price": "2.11"
                           },
                "namespaces": { "my.demo": "n" }
                }
    }';
echo $str;
echo "<br>";
$jsonstr = json_decode($str, true);
print_r($jsonstr);

?>

Eu acho que isso deve funcionar, é só que as chaves também devem estar entre aspas duplas, se não forem numerais.

Pradeep Dhawan
fonte
1

esta minha solução: json string $columns_validation = string(1736) "[{"colId":"N_ni","hide":true,"aggFunc":null,"width":136,"pivotIndex":null,"pinned":null,"rowGroupIndex":null},{"colId":"J_2_fait","hide":true,"aggFunc":null,"width":67,"pivotIndex":null,"pinned":null,"rowGroupIndex":null}]"

então eu uso json_decode duas vezes assim:

$js_column_validation = json_decode($columns_validation);
$js_column_validation = json_decode($js_column_validation); 

var_dump($js_column_validation);

e o resultado é:

 array(15) { [0]=> object(stdClass)#23 (7) { ["colId"]=> string(4) "N_ni" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(136) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL } [1]=> object(stdClass)#2130 (7) { ["colId"]=> string(8) "J_2_fait" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(67) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL }
Mourad MAMASSI
fonte
Thankz bro ... você salvou meu dia
Nuwan Withanage
1

Certifique-se de que a sequência esteja no seguinte formato JSON, mais ou menos assim:

{"result":"success","testid":"1"} (with " ") .

Caso contrário, você pode adicionar "responsetype => json" seus parâmetros de solicitação.

Em seguida, use json_decode($response,true)para convertê-lo em uma matriz.

unpokkolokko
fonte
1
Bem-vindo ao StackOverflow :-) A comunidade está sempre feliz com os novos membros que desejam contribuir e aprecia sua atitude. Infelizmente, outro membro achou que sua resposta merecia voto negativo. Pode ser porque a pergunta em si foi feita há sete anos e já foi respondida várias vezes. Além disso, a responseTypepropriedade é usada para determinar o tipo de dados na resposta à solicitação. No entanto, o problema é que o corpo da solicitação contém dados que não estão no próprio formato correto. Sua resposta, portanto, não se encaixa no contexto fornecido.
Philipp Maurer
1

Você pode alterar uma string para JSON da seguinte maneira e também pode aparar, descascar a string, se desejar,

$str     = '[{"id":1, "value":"Comfort Stretch"}]';
//here is JSON object
$filters = json_decode($str);

foreach($filters as $obj){
   $filter_id[] = $obj->id;
}

//here is your array from that JSON
$filter_id;
Shahrukh Anwar
fonte
0

Use este conversor, ele não falha: Services_Json

// create a new instance of Services_JSON
$json = new Services_JSON();

// convert a complexe value to JSON notation, and send it to the browser
$value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
$output = $json->encode($value);
print($output);
// prints: ["foo","bar",[1,2,"baz"],[3,[4]]]

// accept incoming POST data, assumed to be in JSON notation
$input = file_get_contents('php://input', 1000000);
$value = $json->decode($input);

// if you want to convert json to php arrays:
$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
Farhad Sakhaei
fonte
-2
$data = json_encode($result, true);

echo $data;
Viktor
fonte
2
Embora esse código possa responder à pergunta, fornecer um contexto adicional a respeito de por que e / ou como esse código responde à pergunta melhora seu valor a longo prazo.
Rollstuhlfahrer