Php 保留字符串的原始值并像json一样对其进行解码
我希望保留目标字段的原始值,并使用json_decode将以下字符串用作对象:Php 保留字符串的原始值并像json一样对其进行解码,php,json,Php,Json,我希望保留目标字段的原始值,并使用json_decode将以下字符串用作对象: { "translatorID": "f4a5876a-3e53-40e2-9032-d99a30d7a6fc", "label": "ACL", "creator": "Nathan Schneider", "target": "^https?://(www[.])?aclweb\\.org/anthology-new/[^#]+", "minVersion": "1.0.7
{
"translatorID": "f4a5876a-3e53-40e2-9032-d99a30d7a6fc",
"label": "ACL",
"creator": "Nathan Schneider",
"target": "^https?://(www[.])?aclweb\\.org/anthology-new/[^#]+",
"minVersion": "1.0.7",
"maxVersion": "",
"priority": 100,
"browserSupport": "gcs",
"inRepository": true,
"translatorType": 4,
"lastUpdated": "2012-01-01 01:42:16"
}
在使用
json\u decode
解析之前,您可以做的是:
$string = str_replace('\\', '\\\\\\\\', $string);
var_dump(json_decode($string, true));
这一定是json解析器中的错误。方法不是很干净,但至少你得到了结果。你试过去掉斜线吗 这对我很有用:
$string = '{
"translatorID": "f4a5876a-3e53-40e2-9032-d99a30d7a6fc",
"label": "ACL",
"creator": "Nathan Schneider",
"target": "^https?://(www[.])?aclweb\.org/anthology-new/[^#]+",
"minVersion": "1.0.7",
"maxVersion": "",
"priority": 100,
"browserSupport": "gcs",
"inRepository": true,
"translatorType": 4,
"lastUpdated": "2012-01-01 01:42:16"
}';
var_dump( json_decode(stripslashes ($string)));
你是如何解码的,代码。你是如何得到JSON的?这对我来说很好:我确信不久前在另一个用户名下问了一个与此相同的问题。(编辑)它似乎已被删除。问题是-如果输入有那两个反斜杠,这很好,但如果在字符串中键入这两个反斜杠,它实际上是一个反斜杠,转义。。。要生成两个反斜杠,需要编写其中4个。在JSON中是无效的转义序列。甚至不会验证您现在拥有的JSON。您的早期版本带有两个斜杠(
\\.
)是可以的,但如果它位于PHP字符串中则不行。在这种情况下,您必须像我在演示中那样避开反斜杠。反斜杠是字符串中的转义字符,因此“\\”
将产生\.
,这在JSON中是无效的,正如前面提到的。我根据他的输入字符串进行了回答,替换后我得到了正确的结果。他的输入是有效的JSON,但如果他在代码中键入相同的字符串值,如果不从文件/db/中读取,那么他需要将反斜杠的数量增加一倍himself@Reza它返回NULL和任何其他组合。这改变了targetA的原始值。繁琐的解决方案可能是使用AddCslash和一些正则表达式来转义结果数组/对象上的stripslashes未替换的字符。