Javascript 如何将数据从字符串类型格式化为有效的JSON对象
我得到了一个字符串类型的数据,如下所示Javascript 如何将数据从字符串类型格式化为有效的JSON对象,javascript,json,Javascript,Json,我得到了一个字符串类型的数据,如下所示 { "Description": "some descriptions", "Customers": { "Customer": { "Name": "John Smith", "Phone": "123-456-7890" }, "Customer": { "Name": "Chris Lee",
{
"Description": "some descriptions",
"Customers": {
"Customer": {
"Name": "John Smith",
"Phone": "123-456-7890"
},
"Customer": {
"Name": "Chris Lee",
"Phone": "555-666-7890"
}
},
"Addresses": {
"Address": {
"City": "New York"
}
}
}
我在将其转换为如下所示的有效JSON对象时遇到问题
{
"Description": "some descriptions",
"Customers": [
{
"Name": "John Smith",
"Phone": "123-456-7890"
},
{
"Name": "Chris Lee",
"Phone": "555-666-7890"
}
],
"Addresses": [
{
"City": "New York"
}
]
}
到目前为止,我尝试使用JSON.parse,但没有成功。结果看起来像
{
"Description": "some descriptions",
"Customers": {
"Customer": {
"Name": "John Smith",
"Phone": "123-456-7890"
}
},
"Addresses": {
"Address": {
"City": "New York"
}
}
}
你可以看到,我丢失了一个客户记录
我根本无法更改数据的内容。如果可以的话,我会把客户做成一个阵列,这应该可以解决问题,但我做不到
我还考虑过使用javascript正则表达式来实现这一点,运气不好
任何想法都会有帮助,谢谢。假设在源代码处修复此问题的所有其他途径都失败了,我建议计算客户和地址的密钥,然后在将json转换为对象后对其进行任何其他操作 常量str=`{ 描述:一些描述, 顾客:{ 客户:{ 姓名:约翰·史密斯, 电话:123-456-7890 }, 客户:{ 姓名:克里斯·李, 电话:555-666-7890 } }, 地址:{ 地址:{ 城市:纽约 } } }`; 设cCount=0; 设a计=0; const out=str.replace/Customer | Address/g,功能a{ 如果a==‘客户’{ 返回`Customer${cCount++}`; }否则{ 返回`Address${aCount++}`; } }; 控制台。注销; .作为控制台包装{ 最大高度:100%!重要
} 如果无法修复源数据,下面是一个将子元素转换为数组的函数:
function makeArrays(json, pairs) {
for (i in pairs) {
// Turn container into array
re = new RegExp(pairs[i][0]+'": {');
json = json.replace(re, pairs[i][0]+'": [');
// Remove label from child element
re = new RegExp('"'+pairs[i][1]+'": ', 'g');
json = json.replace(re, '');
}
// Close array
json = json.replace(/} }/g, '} ]');
return json;
}
此函数接受两个参数。第一个是原始JSON字符串,第二个是容器和子元素标签对
调用如下所示:
makeArrays(jsonInput, [['Customers', 'Customer'],['Addresses', 'Address']])
输出将是:
{ "Description": "some descriptions", "Customers": [ { "Name": "John Smith", "Phone": "123-456-7890" }, { "Name": "Chris Lee", "Phone": "555-666-7890" } ], "Addresses": [ { "City": "New York" } ] }
这是有效的JSON。可能会失败,因为源JSON包含客户:{cust1,cust2},而不是客户:[cust1,cust2]。如果要在结果中使用数组,则需要在源代码中使用数组。请修复源代码,而不是症状。@str OP相当明确地说,他不能使用regexp与有效的json字符串交互。将它转换为一个对象,对其进行操作,然后如果您确实需要它作为json字符串返回,请将该对象字符串化。@zfrisch我明白了。但是数据交换格式已经被指定为不存在这样的情况。无效的JSON根本不是JSON。如果源代码生成了这样的垃圾,你怎么知道它不会生成更多的垃圾来破坏你的修复?如果您不能更改产品,则更换生产商。