问题更新
现在的字符串内容
'{
"black_list": [],
"punc": [],
"leader": [],
"org": [],
"pol": [],
"grammar_pc": [],
"order": [],
"idm": [],
"word": [],
"char": [],
"redund": [],
"miss": [],
"dapei": [],
"number": [],
"addr": [],
"name": [],
"yjtimeintegrity": [[-1,"","2023年03月16日16时","发布时间不完整,没有包含"月"、"日"、"时"。"]],
"yjaddr": [[-1,"","","未包含正确的行政区域名称。"]],
"yjtemperature": [[63,"97","","温度数据异常。"],[59,"93","","温度数据异常。"]],
"yjillegal": [[75,"测试","","内容包含非法关键词。"]]
}'
我用以下三种方式转换都报错
JSON.parse(str); // 第一种
eval("(" + str + ")"); // 第二种
(new Function("return " + str))(); // 第三种
原问题
'{
"black_list": [],
"punc": [],
"leader": [],
"org": [],
"pol": [],
"grammar_pc": [],
"order": [],
"idm": [],
"word": [],
"char": [],
"redund": [],
"miss": [],
"dapei": [],
"number": [],
"addr": [],
"name": [],
"yjdatetime": [[10,"20230316","2023年03月15日","发布时间与当前时间不一致"]],
"yjaddr": [[-1,"","","未包含正确的行政区域名称。"]],
"yjtemperature": [[63,"97","","温度数据异常。"]],
"yjtemperature": [[59,"93","","温度数据异常。"]]
}'
展示出来的只有最后 yjtemperature
内容 前一个被覆盖过滤了
可以将键名一致的项合并吗?
因为这个JSON数据是一个JSON对象,并不是集合,所以使用
JSON.parse
转换成JS对象同样是的属性值会被覆盖掉。正常应该把两条重复的数据放到一起,比如说这样:
所以产出JSON数据的时候就提前处理好就是了。为什么要在接收端处理这个问题,造成不必要的麻烦。
做确实可以做,但是没必要做。
我把你的JSON数据格式化了一下,其实你马上就可以看到问题了。你的JSON字符串内的某一部分没有转义内部的引号(
"
),所以导致了JSON解析的失败。还是需要后端处理的时候做转义或者转换成其他引号(
'
、“”
) 来表示,例如说以下这样: