Как преобразовать строку JSON в массив

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

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

this m get at php from get of api this json string, который я хочу передать 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);

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

Ответ 1

Если вы передадите 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.

Ответ 2

Попробуйте следующее:

$data = json_decode($your_json_string, TRUE);

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

Ответ 3

Если вы получаете строку 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;

Ответ 4

Используйте функцию 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

Если вы получаете строку 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));

Ответ 6

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

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

        )

)

Ответ 7

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

https://github.com/mobsted/jsontophparray

Ответ 8

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

?>

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

Ответ 9

если вы хотите преобразовать свой массив в json и наоборот, можете попробовать http://framework.zend.com/manual/en/zend.json.basics.html
просто используйте класс zend_json, у него много приятных функций.

Ответ 10

Используйте этот преобразователь, он не терпит неудачу: 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);

Ответ 11

это мое решение: 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}]"

поэтому я использую json_decode в два раза:

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

var_dump($js_column_validation);

и результат:

 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 }