Как преобразовать строку JSON в массив - PullRequest
102 голосов
/ 22 сентября 2011

Я хочу сделать следующее:

  1. принимая JSON в качестве ввода из текстовой области в php
  2. используйте этот ввод и преобразуйте его в JSON и передайте php curl для отправки запроса.

это получение php из get api этой строки json, которую я хочу передать json, но она не преобразуется в массив

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);

приведенный выше код не возвращает мне массив.

Ответы [ 14 ]

156 голосов
/ 22 сентября 2011

Если вы передадите JSON в своем сообщении json_decode, оно не будет выполнено.Допустимые строки JSON имеют ключи в кавычках:

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.
84 голосов
/ 22 сентября 2011

Попробуйте это:

$data = json_decode($your_json_string, TRUE);

второй параметр превратит декодированную строку json в ассоциативные массивы.

24 голосов
/ 28 января 2013

Если вы получаете строку JSON из формы, используя $_REQUEST, $_GET или $_POST, вам нужно будет использовать функцию html_entity_decode().Я не осознавал этого до тех пор, пока не сделал var_dump того, что было в запросе, против того, что я скопировал, и оператор echo, и заметил, что строка запроса была намного больше.

Правильный путь:

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

с ошибками:

$jsonText = $_REQUEST['myJSON'];
$myArray = json_decode($jsonText, true);
echo json_last_error(); //Returns 4 - Syntax error;
10 голосов
/ 11 июля 2015

Используйте функцию json_decode($json_string, TRUE) для преобразования объекта JSON в массив.

Пример:

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

$my_array_data = json_decode($json_string, TRUE);

ПРИМЕЧАНИЕ. Второй параметр преобразует декодированную строку JSON в ассоциативный массив.

===========

Вывод:

var_dump($my_array_data);

array(5) {

    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
5 голосов
/ 07 сентября 2012

Если вы получаете строку json из URL, используя file_get_contents, выполните следующие действия:

$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));
4 голосов
/ 08 октября 2015

ваша строка должна быть в следующем формате:

$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);

Выход:

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

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

        )

)
1 голос
/ 27 июня 2018

Вы можете конвертировать JSON Object в 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++;
}
1 голос
/ 16 января 2018

Убедитесь, что строка в следующем формате JSON, который выглядит примерно так:

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

Если нет, то вы можете добавить "responsetype => json" в параметры вашего запроса.

Затем используйте json_decode($response,true), чтобы преобразовать его в массив.

1 голос
/ 30 октября 2017
<?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);

?>

Я думаю, что это должно работать, просто ключи должны быть в двойных кавычках, если они не являются цифрами.

1 голос
/ 03 марта 2016

Если вам когда-нибудь понадобится преобразовать файл или структуры JSON в массивы в стиле PHP со всеми уровнями вложенности, вы можете использовать эту функцию. Сначала вы должны json_decode ($ yourJSONdata), а затем передать его этой функции. Он выведет в ваше окно браузера (или консоль) правильные массивы в стиле PHP.

https://github.com/mobsted/jsontophparray

...