json数组在php中编码并在javascript中解码

时间:2018-09-05 13:40:05

标签: javascript php arrays json

我将此f.addStep(steps.Trigger( schedulerNames=['sage-rhel7-sage-test'], doStepIf=partial(do_step, 'sage-rhel7-sage-test'), waitForFinish=True, set_properties=set_properties, haltOnFailure=True)) 编码为JSON

PHP

上述json的php数组为:

{
    "id": "37",
    "user_id": "1",
    "account": "ssdv",
    "amount": "5002",
    "subject": "\u0647\u062f\u06cc\u0647",
    "tags": "[{\"ttt\"}]"
}

array ( 'id' => '37', 'user_id' => '1', 'account' => 'ssdv', 'amount' => '5002', 'subject' => 'هدیه', 'tags' => '["ttt"]', ) 索引是从具有JSON数据类型的MySQL表中读取的,因此我无法更改tags的格式,它必须是json数组。

我已尝试通过以下代码将第一个字符串解码为json:

tags

但是会引发以下错误:
<script> var obj = JSON.parse('{"id":"37","user_id":"1","account":"ssdv","amount":"5002","subject":"\u0647\u062f\u06cc\u0647","tags":"[{"ttt"}]"}'); </script>

我如何在javascript中将此json解析为有效的json?

更新

我的桌子是这样的:

Uncaught SyntaxError: Unexpected token t in JSON at position 86 at JSON.parse (<anonymous>)

id user_id account amount subject tags 37 1 ssdv 5002 هدیه ["ttt"] 字段是MySQL tags类型。

我获取了该记录,并尝试对其进行json_encode编码,json索引在编码后变为tags。但是当我尝试JSON.parse(myEncodedRecord)时,它会导致错误。 "tags":"[{"ttt"}]"看起来必须像这样的tags。我知道我可以通过"tags":["ttt"]实现这一目标,但是还有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

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语法

https://jsonformatter.curiousconcept.com/

答案 1 :(得分:1)

您的JSON字符串中有2个问题:

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”,“ user_id”:“ 1”,“ account”:“ ssdv”,“ amount”:“ 5002”,“ subject”:“ \ u0647 \ u062f \ u06cc \ u0647“,”标签“:[{” ttt“:” test“}]}''

尝试一下,如果您遇到任何问题,请告诉我。

希望有帮助。

答案 2 :(得分:0)

为避免此错误,我必须先对标签字段值进行解码,然后对整个数组进行编码

代码:

//get the record
$record = $this->db->get_where('table', ['id' => $id])->row_array();

//decode tags value
$record['tags'] = json_decode($expense['tags']);

//encode and use
$record = json_encode($record);

现在是标准JSON。