将PHP字符串转换为JSON数组(键:值)

时间:2017-01-09 08:18:44

标签: php arrays json string

我从API调用中收到以下字符串:

a = "{
      "option1"=>"Color",
      "attribute1"=>{0=>"Black", 1=>"White",2=>"Blue"},
      "option2"=>"Size",
      "attribute2"=>{0=>"S", 1=>"L",2=>"M"}
}"

我想将其转换为JSON数组;所以,我尝试了 JSON_encode(),但它返回以下字符串:

""{\"option1\"=>\"Color\",\"attribute1\"=>{0=>\"Black\", 1=>\"White\",2=>\"Blue\"},\"option2\"=>\"Size\",\"attribute2\"=>{0=>\"S\", 1=>\"L\",2=>\"M\"}}"" 

请告诉我如何达到我想要的目的。

由于

1 个答案:

答案 0 :(得分:3)

最好的方法是影响服务,它会为您提供这种字符串以获取有效的JSON字符串(如果可能的话)。
目前,如果它是关于将一​​些“任意”字符串调整为JSON表示法格式并进一步获得JSON“数组”,则使用preg_replacejson_decode函数的以下方法:

$json_str = '{
      "option1"=>"Color",
      "attribute1"=>{0=>"Black", 1=>"White",2=>"Blue"},
      "option2"=>"Size",
      "attribute2"=>{0=>"S", 1=>"L",2=>"M"}
}';

// To get a 'pure' array
$arr = json_decode(preg_replace(["/\"?(\w+)\"?=>/", "/[\r\n]|\s{2,}/"], ['"$1":', ''], $json_str), true);
print_r($arr);

输出:

Array
(
    [option1] => Color
    [attribute1] => Array
        (
            [0] => Black
            [1] => White
            [2] => Blue
        )

    [option2] => Size
    [attribute2] => Array
        (
            [0] => S
            [1] => L
            [2] => M
        )
)

获取表示数组的JSON字符串:

$json_arr = json_encode($arr);
print_r($json_arr);

输出:

{"option1":"Color","attribute1":["Black","White","Blue"],"option2":"Size","attribute2":["S","L","M"]}