将 json 字符串转换为 Javascript 中的对象
Converting json String to Object in Javascript
我在 JS 中有以下 var 形式的文本,这是我从另一个函数获得的。
var text = '["{"a1":"zxcv","a2":"pqrs","c2":[1,2,3],"a3":{"aa3":"asdfgh","aa5":null}}","{"a1":"xyz","a2":"mno","c2":[103],"a3":{"aa8":"qwerty"}}"]';
我需要检查 a1、a2、c2 的计数及其值以及 a3 及其值。
如:a1:2,a2:2,c2:4,a3:3等等(子元素的个数也是)
我能想到的获得结果的粗略方法是首先删除第一个和最后一个“并替换 }”,”{ 为 },{
这给了我一个 json 对象数组,使用 JSON.parse 给了我一个更好的转换结构,然后我可以轻松地遍历它。
我找不到任何库或其他解决方案来替代它。
var text = '["{"a1":"zxcv","a2":"pqrs","c2":[1,2,3],"a3":{"aa3":"asdfgh","aa5":null}}","{"a1":"xyz","a2":"mno","c2":[103],"a3":{"aa8":"qwerty"}}"]';
console.log(text);
text = text.replace(/\["{/g, "[{"); // remove first double quote
text = text.replace(/\}"]/g, "}]"); // remove last double quote
text = text.replace(/\}","{/g, "},{"); // replace middle quotes
console.log(text);
var formattedText = JSON.parse(text);
console.log(formattedText);
我以对象形式获取它后的预期输出,因为我可以遍历对象并使用计数器来维护计数:
a1:2,a2:2,c2:4,a3:3
是否有任何功能(内置或库)可以帮助我解决这个问题?
您可以 尝试 通过删除不是 key/value 定界符的引号来修复该字符串,并将结果解析为 json:
var text = '["{"a1":"zxcv","a2":"pqrs","c2":[1,2,3],"a3":{"aa3":"asdfgh","aa5":null}}","{"a1":"xyz","a2":"mno","c2":[103],"a3":{"aa8":"qwerty"}}"]';
t = text
.replace(/"([^"]+)":/g, '@@:')
.replace(/:"([^"]+)"/g, ':@@')
.replace(/"/g, '')
.replace(/@/g, '"')
console.log(JSON.parse(t))
如果您对这些替换的具体作用感兴趣,请查看下面的 step-by-step 可视化:
var text = '["{"a1":"zxcv","a2":"pqrs","c2":[1,2,3],"a3":{"aa3":"asdfgh","aa5":null}}","{"a1":"xyz","a2":"mno","c2":[103],"a3":{"aa8":"qwerty"}}"]';
String.prototype.show = function(s) {
console.log(s + ": " + this);
return this;
}
t = text
.show('Init')
.replace(/"([^"]+)":/g, '@@:')
.show('Step 1')
.replace(/:"([^"]+)"/g, ':@@')
.show('Step 2')
.replace(/"/g, '')
.show('Step 3')
.replace(/@/g, '"')
.show('Step 4')
我在 JS 中有以下 var 形式的文本,这是我从另一个函数获得的。
var text = '["{"a1":"zxcv","a2":"pqrs","c2":[1,2,3],"a3":{"aa3":"asdfgh","aa5":null}}","{"a1":"xyz","a2":"mno","c2":[103],"a3":{"aa8":"qwerty"}}"]';
我需要检查 a1、a2、c2 的计数及其值以及 a3 及其值。 如:a1:2,a2:2,c2:4,a3:3等等(子元素的个数也是)
我能想到的获得结果的粗略方法是首先删除第一个和最后一个“并替换 }”,”{ 为 },{ 这给了我一个 json 对象数组,使用 JSON.parse 给了我一个更好的转换结构,然后我可以轻松地遍历它。 我找不到任何库或其他解决方案来替代它。
var text = '["{"a1":"zxcv","a2":"pqrs","c2":[1,2,3],"a3":{"aa3":"asdfgh","aa5":null}}","{"a1":"xyz","a2":"mno","c2":[103],"a3":{"aa8":"qwerty"}}"]';
console.log(text);
text = text.replace(/\["{/g, "[{"); // remove first double quote
text = text.replace(/\}"]/g, "}]"); // remove last double quote
text = text.replace(/\}","{/g, "},{"); // replace middle quotes
console.log(text);
var formattedText = JSON.parse(text);
console.log(formattedText);
我以对象形式获取它后的预期输出,因为我可以遍历对象并使用计数器来维护计数:
a1:2,a2:2,c2:4,a3:3
是否有任何功能(内置或库)可以帮助我解决这个问题?
您可以 尝试 通过删除不是 key/value 定界符的引号来修复该字符串,并将结果解析为 json:
var text = '["{"a1":"zxcv","a2":"pqrs","c2":[1,2,3],"a3":{"aa3":"asdfgh","aa5":null}}","{"a1":"xyz","a2":"mno","c2":[103],"a3":{"aa8":"qwerty"}}"]';
t = text
.replace(/"([^"]+)":/g, '@@:')
.replace(/:"([^"]+)"/g, ':@@')
.replace(/"/g, '')
.replace(/@/g, '"')
console.log(JSON.parse(t))
如果您对这些替换的具体作用感兴趣,请查看下面的 step-by-step 可视化:
var text = '["{"a1":"zxcv","a2":"pqrs","c2":[1,2,3],"a3":{"aa3":"asdfgh","aa5":null}}","{"a1":"xyz","a2":"mno","c2":[103],"a3":{"aa8":"qwerty"}}"]';
String.prototype.show = function(s) {
console.log(s + ": " + this);
return this;
}
t = text
.show('Init')
.replace(/"([^"]+)":/g, '@@:')
.show('Step 1')
.replace(/:"([^"]+)"/g, ':@@')
.show('Step 2')
.replace(/"/g, '')
.show('Step 3')
.replace(/@/g, '"')
.show('Step 4')