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

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

  $ sJson ='{“Place”:“MyStore”,“PurchaseID”:“IND.1234-5678-  9012-34567" , “细节”: “{\” JSON \ “:\”{\\ “PurchaseID \\”:\\ “IND.1234-5678-9012-34567 \\”,\  \ “类别名称\\”:\\ “SmartPACK功率\\”,\\ “产品名称\\”:\\ “bitcoinpack1 \\”,\\ “purchaseTime \\”:1504256011148,  \\ “purchaseState \\”:\\ “成功\\”,\\ “UniqueToken \\”:\\ “jbbefji​​fdkpdpajfkomckoof.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;
</ code> </ pre>

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

我需要JSON对象而不是字符串。</ p>

在给定的JSON中, json </ code>值是一个字符串(在有效的JSON内) 以“</ code>开头。</ p>

我需要删除它。</ p>
</ div>

展开原文

原文

I am having the following JSON(invalid) as a string. I need to parse it and get the inner value. I tried a lot but didn't get the result.

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

The Result $newjson is not return as JSON Object, it gives as only string.

I need JSON object not a string.

In the given JSON, json value is a string(inside valid JSON) which starts with ".

I need to remove this.

duanrongpai9556
duanrongpai9556 我无法纠正来源
大约 3 年之前 回复
dsimib1625
dsimib1625 那里的“JSON”来自哪里?我猜你不能纠正源头吧?
大约 3 年之前 回复
duancaozen6066
duancaozen6066 是的,您可以在localhost中检查我的代码,即var_dump返回值是字符串而不是JSON对象
大约 3 年之前 回复
du8791069
du8791069 这就是我说的,我需要将它作为一个有效的JSON,然后我可以解析整个JSON。
大约 3 年之前 回复
drgovyk64676
drgovyk64676 在jslint可能但不是在JSONLint。
大约 3 年之前 回复
dongmu1914
dongmu1914 它似乎在jslint.com和jsonlint.com上是有效的json,所以你应该能够解码它。
大约 3 年之前 回复
dsh1956
dsh1956 你拥有的是无效的JSON......
大约 3 年之前 回复
douzhang2092
douzhang2092 你为什么json_encode()已经编码了?你的意思是json_decode()吗?我会为这个函数的参数和结果使用不同的变量名。
大约 3 年之前 回复
douyuliu9527
douyuliu9527 benalman.com/news/2010/03/theres-no-such-thing-as-a-json
大约 3 年之前 回复

2个回答



字符串主要是</ em>有效的json,你只需要调整一些东西:</ p> \ n

首先,将所有 \“</ code>替换为”</ code>。 (我必须运行两次)</ p>

  $ string = str_replace('\'','“',$ string); 
</ code> </ pre >

然后引用一些大括号:</ p>

  $ string = str_replace('“{”,'{',$ string); 
$ string = str_replace('}“','}',$ string);
</ code> </ pre>

一旦完成,我就能成功解码你的json。 使用preg_replace可以更快地完成这项工作,但我对正则表达式感到厌烦。</ p>
</ div>

展开原文

原文

The string is mostly valid json, you just need to tweak a few things:

First, replace all of the \\" with ". (I had to run this twice)

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

Then some of the braces are quoted:

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

Once that was done, I was able to successfully decode your json. This could possibly be done faster with preg_replace, but I suck at regexes.

doulaopu2343
doulaopu2343 它适用于我sandbox.onlinephpfunctions.com/code / ...
大约 3 年之前 回复
duan0708676887
duan0708676887 我也试过了。 但无法得到结果。
大约 3 年之前 回复



json_encode </ code>采用PHP数据结构并将其转换为JSON字符串。</ p>

你需要 json_decode </ code>走另一条路。</ p>
</ div>

展开原文

原文

json_encode takes a PHP data structure and turns it into a string of JSON.

You need json_decode to go the other way.

douxia5179
douxia5179 给定字符串不是有效的。 请联系在线json编辑。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问