我将此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"]
实现这一目标,但是还有更好的方法吗?
答案 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语法
答案 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。