Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
json数组用php编码,用javascript解码_Javascript_Php_Arrays_Json - Fatal编程技术网

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
字段是MySQL
json
类型

我获取这条记录并尝试对其进行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代码。服务器端一定出了什么问题