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


123

我想做的是以下几点:

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

这是从api的获取处获取的php这个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);

上面的代码没有返回我数组。


1
您是否需要将json字符串转换为数组,还是要从该数据中伪造一个url?到底是什么问题?
Janis Veinbergs 2011年

then it is not giving不给什么?您从textarea中获取JSON格式的字符串,然后将其转换为JSON ???
PeeHaa 2011年

1
如果你在我的问题json_decode做上述JSON(,真)它retuns阵列
X战警

@Pekka请再次检查我的问题。
XMen 2011年

3
无效的json问题,这是。
XMen 2011年

Answers:


187

如果将帖子中的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.

如果你在我的问题json_decode做上述JSON(,真)它retuns阵列
X战警

@RahulMehta如果您使用的是PHP内置函数,json_decode()NULL当JSON无效(例如,没有引号的键)时,它将返回。这就是文档所说的,这就是我的PHP 5.2安装返回的内容。您使用的不是官方的内置功能json_decode()吗?什么var_dump(json_decode($str, true));回报?
RickN 2011年

json_encoding之后,我想读取每个单独的json对象,例如{foo:“ bar”}作为数组中的对象。如何从json_encoded数据创建数组以读取每个json对象?@RikkusRukkus
Manny265 '18

@ Manny265听起来像是一个值得回答的问题,它带有(1)一些示例代码,(2)到目前为止您尝试了什么,以及(3)预期结果,而不是此注释部分。
RickN

96

试试这个:

$data = json_decode($your_json_string, TRUE);

第二个参数将使解码的json字符串成为一个关联数组。


30

如果要使用,或从表单中获取JSON字符串$_REQUEST,则需要使用函数。直到我完成了请求中的内容与我复制到并声明中的内容之后,我才意识到这一点,并注意到请求字符串要大得多。$_GET$_POSThtml_entity_decode()var_dumpecho

正确方法:

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

2
完美,这可行。当我从$ _POST函数获取数据json_last_error()为=到JSON_ERROR_SYNTAX时。但是一切都很好。这是解码的错误,而不是像ascii或utf8这样的编码错误。谢谢

11

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

6

如果您正在使用从URL获取json字符串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
                )

        )

)

2

您可以将json对象转换为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
<?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

这是我的解决方案:json字符串 $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 }

谢谢你,你救了我的一天
Nuwan Withanage '19

1

确保该字符串采用以下JSON格式:

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

如果没有,则可以添加"responsetype => json"请求参数。

然后使用json_decode($response,true)将其转换为数组。


1
欢迎使用StackOverflow :-)社区总是对希望为其做出贡献并感谢您的态度的新成员感到高兴。不幸的是,另一位成员认为您的答案值得一票。这可能是因为问题本身是大约七年前提出的,已经被回答了好几次了。另外,该responseType属性用于确定请求答案中的数据类型。但是问题是,请求主体包含的数据本身不正确。因此,您的答案不适合给定的上下文。
Philipp Maurer

1

您可以按照以下方式将字符串更改为JSON,还可以根据需要修剪,剥离字符串,

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

0

使用此转换器,它完全不会失败: 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);

-2
$data = json_encode($result, true);

echo $data;

2
尽管此代码可以回答问题,但提供有关此代码为什么和/或如何回答问题的其他上下文,可以改善其长期价值。
rollstuhlfahrer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.