不能';t将字符串转换为JSON。字符串转换为有效的JSON,并在PHP中解析JSON

不能';t将字符串转换为JSON。字符串转换为有效的JSON,并在PHP中解析JSON,php,json,Php,Json,我将以下JSON(无效)作为字符串。我需要解析它并获得内部值。我试了很多,但没有得到结果 $sJson = '{"Place":"MyStore","PurchaseID":"IND.1234-5678-9012-34567","details":"{\"json\":\"{\\\"PurchaseID\\\":\\\"IND.1234-5678-9012-34567\\\",\\\"categoryname\\\":\\\"smartpack\\\",\\\"productname\\

我将以下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中),以
开头


我需要删除它。

json\u encode
采用PHP数据结构并将其转换为json字符串


您需要
json\u decode
来实现另一种方式。

json\u encode
采用PHP数据结构并将其转换为json字符串

您需要
json\u decode
来进行另一种方式。

字符串大部分是有效的json,您只需要调整一些东西:

首先,将所有的
\\“
替换为
(我必须运行两次)

然后引用一些大括号:

$string = str_replace('"{', '{', $string);
$string = str_replace('}"', '}', $string);
一旦完成,我就能够成功解码您的json。使用preg_replace可能会更快,但我在正则表达式方面做得很差。

字符串大部分是有效的json,您只需要调整几件事:

首先,将所有的
\\“
替换为
(我必须运行两次)

然后引用一些大括号:

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

一旦这样做了,我就能够成功地解码你的json。使用preg_replace可能会更快,但我在正则表达式方面做得很差。

你为什么要
json_encode()
一些已经编码的东西?你不是说
json_decode()
?我会为这个函数的参数和结果使用不同的变量名。您拥有的是无效的JSON…在jslint.com和jsonlint.com上它似乎是有效的JSON,所以您应该能够解码它。在jslint上可能会,但在jsonlint上不会。为什么
JSON\u encode()
已经编码的东西?你是说
json\u decode()
?我会为这个函数的参数和结果使用不同的变量名。您拥有的是无效的JSON…在jslint.com和jsonlint.com上它似乎是有效的JSON,所以您应该能够对它进行解码。在jslint上可能是,但在jsonlint上不是。给定的字符串无效。请与在线JSON编辑器联系。给定的字符串不是有效的d、 请与在线json编辑器联系。它对我有用它对我有用