json数组用php编码,用javascript解码
我用json数组用php编码,用javascript解码,javascript,php,arrays,json,Javascript,Php,Arrays,Json,我用PHP编码了这个JSON: { "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' =&
PHP
编码了这个JSON
:
{
"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
索引是用JSON数据类型从MySQL表中读取的,所以我不能更改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>
tags
字段是MySQLjson
类型
我获取这条记录并尝试对其进行json_编码,tags
索引在编码后变成“tags”:“[{“ttt”}]”
。但当我尝试解析JSON.parse(myEncodedRecord)时,它会导致错误。看起来标签
必须是这样的“标签”:[“ttt”]
。我知道我可以通过preg\u replace()
实现这一点,但是有更好的方法吗
JSON.parse('{"id":"37","user_id":"1","account":"ssdv","amount":"5002","subject":"\u0647\u062f\u06cc\u0647","tags":["ttt"]}');
如果标记是数组,为什么需要{}
。我删除了它们,并且能够解析它们。
这在控制台中对我有效。在try中使用解析是安全的
如果标签是一个单一的实体,就像我们有3个标签,我们只需要显示它的名称,我们可以简单地把它作为一个数组。只有当我们需要显示多个属性时,我们才需要将其作为对象数组获取。
第一种情况是
"tags":["tag1name", "tag2name","tag3name"]
如果它有多个属性
"tags":[{"name":"tag1name","type":"type1"},{"name":"tag2name","type":"type2"},{"name":"tag3name","type":"type3"}]
您可以在以下网站的帮助下验证JSON语法
如果标记是数组,为什么需要{}
。我删除了它们,并且能够解析它们。
这在控制台中对我有效。在try中使用解析是安全的
如果标签是一个单一的实体,就像我们有3个标签,我们只需要显示它的名称,我们可以简单地把它作为一个数组。只有当我们需要显示多个属性时,我们才需要将其作为对象数组获取。
第一种情况是
"tags":["tag1name", "tag2name","tag3name"]
如果它有多个属性
"tags":[{"name":"tag1name","type":"type1"},{"name":"tag2name","type":"type2"},{"name":"tag3name","type":"type3"}]
您可以在以下网站的帮助下验证JSON语法
您的JSON字符串中有两个问题:
1.)不能将数组用作字符串。因此,请将字符串“[{“ttt”}]”
更改为[{“ttt”}]
2.)初始化对象时,不能单独指定索引。您还应该指定该值。因此,在上面这一点上,请注意数组中的对象初始化。如果只提供一个字符串,它将认为索引不是值。这是javascript而不是PHP
因此,您可以:
1.) Change the `[{"ttt"}]` to `[{"ttt":"test"}]`. That should work or
2.) Change the `[{"ttt"}]` to `[{"value":"ttt"}]` however you feel comfortable.
我已经考虑了第一个选项,因此您的结果字符串为:
var txt='{“id”:“37”,“用户id”:“1”,“帐户”:“ssdv”,“金额”:“5002”,“主题”:“\u0647\u062f\u06cc\u0647”,“标记”:[{“ttt”:“测试”}]}”
试试这个,如果你遇到任何问题,请告诉我
希望这有帮助。您的JSON字符串中有两个问题:
1.)不能将数组用作字符串。因此,请将字符串“[{“ttt”}]”
更改为[{“ttt”}]
2.)初始化对象时,不能单独指定索引。您还应该指定该值。因此,在上面这一点上,请注意数组中的对象初始化。如果只提供一个字符串,它将认为索引不是值。这是javascript而不是PHP
因此,您可以:
1.) Change the `[{"ttt"}]` to `[{"ttt":"test"}]`. That should work or
2.) Change the `[{"ttt"}]` to `[{"value":"ttt"}]` however you feel comfortable.
我已经考虑了第一个选项,因此您的结果字符串为:
var txt='{“id”:“37”,“用户id”:“1”,“帐户”:“ssdv”,“金额”:“5002”,“主题”:“\u0647\u062f\u06cc\u0647”,“标记”:[{“ttt”:“测试”}]}”
试试这个,如果你遇到任何问题,请告诉我
希望这有帮助。为了避免这个错误,我必须先解码标签字段值,然后对整个数组进行编码
代码:
现在它是一个标准的JSON。为了避免这个错误,我必须先对标记字段值进行解码,然后对整个数组进行编码
代码:
现在它是标准的JSON。为什么不使用上面显示的字符串?该字符串已正确编码(假设有一个结束符}
..),您可以直接将其发送到javascript,而无需对其进行引号和解析。您在tags参数中嵌入了双引号。你必须转义它们。你可以而且应该更改MySQL json格式。如果您通过json_解码运行它,您将得到一个普通的PHP数组,然后您可以将该数组放入“tags”键中,json_对整个过程进行编码,并避免双重编码/解码的任何令人讨厌的问题。让我们知道这是怎么回事。这里没有转义的双引号不是问题,Alexander说得对,在运行查询之前需要正确设置DB编码。请注意,当json编码无效时,您不会从[{\'ttt\'}]
获得['ttt']
。它将改为像这样编码:“[\“tt\”]”“
为什么不使用上面显示的字符串?该字符串已正确编码(假设有一个结束符}
..),您可以直接将其发送到javascript,而无需对其进行引号和解析。您在tags参数中嵌入了双引号。你必须转义它们。你可以而且应该更改MySQL json格式。如果您通过json_解码运行它,您将得到一个普通的PHP数组,然后您可以将该数组放入“tags”键中,json_对整个过程进行编码,并避免双重编码/解码的任何令人讨厌的问题。让我们知道这是怎么回事。这里没有转义的双引号不是问题,Alexander说得对,在运行查询之前需要正确设置DB编码。请注意,当json编码无效时,您不会从[{\'ttt\'}]
获得['ttt']
。它将改为像这样编码:“[\“tt\”]”“
除了用php输出外,preg\u replace是实现这一点的最佳方法吗。请显示php代码。我相信服务器端一定出了什么问题。我更新了这个问题,我只是简单地使用一个select查询来获取记录,这是实现这一点的最佳方法,而不是用php输出。请显示php代码。服务器端一定出了什么问题