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

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

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

это m получить на 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); 

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

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

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

 $data = json_decode($your_json_string, TRUE); 

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

Если вы получаете строку JSON из формы с помощью $_REQUEST , $_GET или $_POST вам нужно будет использовать функцию html_entity_decode() . Я не понимал этого до тех пор, пока не var_dump того, что было в запросе, и что я скопировал и 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; 

Используйте 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) } 

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

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

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

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

https://github.com/mobsted/jsontophparray

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

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

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

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

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