如何将JSON字符串转换为数组

我想要做的是以下几点:

  1. 把JSON作为从php中的文本区域的输入
  2. 使用此输入并将其转换为JSON并将其传递给php curl发送请求。

这m获取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字符串变成一个关联数组。

如果使用$_REQUEST$_GET$_POST从表单中获取JSON字符串,则需要使用函数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; 

使用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) } 

如果您使用file_get_contents从URL获取json字符串,请按照以下步骤操作:

 $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

如果你想转换你的数组到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); 
 <?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); ?> 

我认为这应该工作,只是如果他们不是数字,钥匙也应该用双引号。