【发布时间】:2019-02-10 16:27:38
【问题描述】:
我有这个JSON 用PHP 编码:
{
"id": "37",
"user_id": "1",
"account": "ssdv",
"amount": "5002",
"subject": "\u0647\u062f\u06cc\u0647",
"tags": "[{\"ttt\"}]"
}
上述 json 的 php 数组为:
array (
'id' => '37',
'user_id' => '1',
'account' => 'ssdv',
'amount' => '5002',
'subject' => 'هدیه',
'tags' => '["ttt"]',
)
tags 索引是从 MySQL 表中读取的 JSON 数据类型,所以我不能更改 tags 的格式,它必须是 json 数组。
我已尝试通过此代码将第一个字符串解码为 json:
<script>
var obj = JSON.parse('{"id":"37","user_id":"1","account":"ssdv","amount":"5002","subject":"\u0647\u062f\u06cc\u0647","tags":"[{"ttt"}]"}');
</script>
但它会引发此错误:
Uncaught SyntaxError: Unexpected token t in JSON at position 86 at JSON.parse (<anonymous>)
如何在 javascript 中将此 json 解析为有效的 json?
更新
我的桌子是这样的:
id user_id account amount subject tags
37 1 ssdv 5002 هدیه ["ttt"]
tags 字段为 MySQL json 类型。
我获取这条记录并尝试对其进行 json_encode,tags 索引在编码后变为"tags":"[{"ttt"}]"。但是当我尝试 JSON.parse(myEncodedRecord) 时会导致错误。看起来tags 必须是这样的"tags":["ttt"]。我知道我可以通过 preg_replace() 实现这一点,但有没有更好的方法?
【问题讨论】:
-
为什么不使用顶部显示的字符串?该字符串已正确编码(假设有一个结束
}...),您可以将其直接发送到 javascript,而无需引用和解析它。 -
您在 tags 参数中嵌入了双引号。你必须逃离他们。
-
您可以并且应该更改 MySQL json 格式。如果你通过 json_decode 运行它,你会得到一个普通的 PHP 数组,然后你可以把这个数组放在 'tags' 键中并 json_encode 整个事情,避免双重编码/解码的任何讨厌的问题。让我们知道情况如何。
-
双引号没有被转义不是问题,Alexander说得对,在查询运行之前需要正确设置DB编码。
-
请注意,当 json 编码时,您不会从
["ttt"]获得[{\"ttt\"}],因为那将是无效的语法。相反,它会被编码为"tags":"[\"tt\"]"
标签: javascript php arrays json