无法将字符串转换为JSON。字符串到有效JSON并在PHP中解析JSON

时间:2017-09-01 11:20:04

标签: php json

我将以下JSON(无效)作为字符串。我需要解析它并获得内在价值。我尝试了很多,但没有得到结果。

    $sJson = '{"Place":"MyStore","PurchaseID":"IND.1234-5678-9012-34567","details":"{\"json\":\"{\\\"PurchaseID\\\":\\\"IND.1234-5678-9012-34567\\\",\\\"categoryname\\\":\\\"smartpack\\\",\\\"productname\\\":\\\"bitcoinpack1\\\",\\\"purchaseTime\\\":1504256011148,\\\"purchaseState\\\":\\\"Success\\\",\\\"UniqueToken\\\":\\\"jbbefjifdkpdpajfkomckoof.AO-J1OzEdsZX17M5pAvedDh1Ep_WwlOKamMQN_3O89bRbAPX-uoqPpTJf8EdNcjMhCK1dptGaWReUCSS9JGCJuh6GlAT0l11mkUddo_uJ4YOe8ezYxlmDQ8\\\"}\",\"currentvalue\":\"S270U2J3XF\\/+XnC1ocPp0d\\/Kwf\\/4B\\/\\/tT7urbDn6F+\\/D8j7VD1t8qqwevtKDnAafAtvocPg4Eevkf\\/GZKl1YOgUYyuY63nyekz7GRDuIKVXAZ+iZtPAbwCuwZplUQHaVA\\/EBMjYpPQM0EFtp2WuX\\/Tx9nTnFCtU+gAK4Rg0zLvQNKSJx5WfqhK7wf0wHTTYviTkB\\/pETnkV22oQDIZH9\\/Fy1FXltC7FXHXoMcxtGvkgPSEFOnms4HumjUQ5PtQUbxh\\/oirQeROCAhkO+WKX9WO3bCKjru1uuxspTLCNGJEKAezi2GEBcpFGjq4iS5N7SfO5BOF76\\/joLe3B7OemJNw==\"}"}';

    $sJson = json_encode($sJson,JSON_UNESCAPED_SLASHES);
    $json_array = (array) json_decode($sJson,true);
    $newjson=preg_replace('/.+?({.+}).+/','$1',$json_array);
    var_dump($newjson);
    exit;

结果$newjson不作为JSON对象返回,它只提供字符串。

我需要JSON对象而不是字符串。

在给定的JSON中,json值是一个字符串(在有效的JSON内),以"开头。

我需要删除它。

2 个答案:

答案 0 :(得分:2)

json_encode采用PHP数据结构并将其转换为JSON字符串。

你需要json_decode走另一条路。

答案 1 :(得分:1)

字符串主要是有效的json,你只需要调整一些东西:

首先,用\\"替换所有"。 (我必须跑这两次)

$string = str_replace('\\"', '"', $string);

然后引用了一些大括号:

$string = str_replace('"{', '{', $string);
$string = str_replace('}"', '}', $string);

一旦完成,我就能成功解码你的json。使用preg_replace可以更快地完成这项工作,但我对正则表达式很感兴趣。