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

172

我想要做的是:

  1. 从 PHP 文本区域获取 JSON 输入
  2. 使用此输入并将其转换为 JSON,然后将其传递给 PHP curl 发送请求。

我从 API 的 GET 请求中得到了这个 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
那它没有给出什么?你从文本区域中获取一个JSON格式的字符串,然后将其转换为JSON? - PeeHaa
1
如果你在我的问题中使用json_decode(,true)来处理以上的JSON,它会返回一个数组。 - XMen
@Pekka 请再次检查我的问题。 - XMen
3
无效的JSON问题。 - XMen
显示剩余3条评论
17个回答

2

您所调用的字符串存在问题,无法解析为json格式。以下是我对其进行的一些更改。如果您能将该字符串正确格式化为json,下面的代码就可以正常运行。

$str = '{
        "action" : "create",
        "record": {
            "type": "n$product",
            "fields": {
                "nname": "Bread",
                "nprice": 2.11
            },
            "namespaces": { "my.demo": "n" }
        }
    }';

    $response = json_decode($str, TRUE);
    echo '<br> action' . $response["action"] . '<br><br>';

2
 <?php

 $str='{
    "action" : "create",
    "record": {
        "type": "n$product",
        "fields": {
            "n$name": "Bread",
            "n$price": 2.11
        },
        "namespaces": { "my.demo": "n" }
    }
}';

 $json = json_decode($str,true);
 echo '<pre>';
 print_r($json);
 

这应该可以工作,只是如果键不是数字,键也应该用双引号括起来。

输出:

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

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

它将把Json字符串转换为数组。

嗨,谢谢你的回答。如果您能解释一下您的代码是做什么的,那就太好了。这样可以帮助社区更好地从您身上学习! - Simas Joneliunas

2

请确保字符串遵循以下JSON格式,类似于:

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

如果没有,你可以在请求参数中添加"responsetype => json"

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


1
欢迎来到StackOverflow :-) 社区总是欢迎想要为其做出贡献的新成员,并赞赏你的态度。不幸的是,另一个成员认为你的答案应该被点踩。这可能是因为问题本身已经在七年前提出并已经多次得到解答。此外,responseType属性用于确定请求响应中数据的类型。然而,问题在于请求体本身包含了格式不正确的数据。因此,你的答案不符合给定的上下文。 - Philipp Maurer

1
使用这个转换器,它绝不会失败: 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);

1
如果您需要将JSON文件或结构转换为PHP风格的数组,并保留所有嵌套级别,您可以使用此函数。首先,您必须json_decode($yourJSONdata),然后将其传递给此函数。它将输出正确的PHP样式数组到您的浏览器窗口(或控制台)。

https://github.com/mobsted/jsontophparray


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;

它将返回[1]作为$filter_id,并返回相同的json对象作为$filters。 - Prince Hamza

0

如果您将JSON数据作为对象发送,请在解码数据之前将其设置为对象,以便使用它获取JSON数据的对象。以下代码仅在以JSON字符串形式发送对象时才有效:

$data = (object)json_decode($_POST['data'])


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接