我对编程很陌生,找不到解决方案,请给我解决方案吗?
我有这个JSON文件:
{
"groups": "[{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }]"
}
我的js中需要这样的东西(但我想导入JSON以得到这样的数组):
const groups = [{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }]
如果不使用jQuery,我不知道该怎么办。
我已经尝试过:
const json = require('./test.json');
此代码返回一个对象:
这几乎是我想要的,但是当我在代码中使用它时却无法正常工作,因为我不想要对象,而是像上面所说的那样放置数组。
如何实现?
答案 0 :(得分:3)
groups
的值不是有效的JSON:字符串值应该用双引号引起来,键也应该用双引号引起来。该字符串中包含有效JSON的文件如下所示:
{
"groups": "[{ \"id\": 1, \"title\": \"group 1\" }, { \"id\": 2, \"title\": \"group 2\" }]"
}
当然,如果您可以控制此文件的创建,则最好将此值作为本机JSON内容的一部分,而不是JSON-in-a-string-inside-JSON。如果不可能,则需要自己更正字符串中的引号,这可以通过几次正则表达式替换来完成。
/* obj is the object in the JSON file */
var json_str = obj.groups.replace(/'/g,"\"").replace(/([a-z]+)\:/g,"\"$1\":");
var groups = JSON.parse(json_str);
或者,尽管字符串不是有效的JSON,但它是有效的Javascript表达式,因此如果文件的内容是可信的,您也可以使用eval:
var groups = eval(obj.groups);
答案 1 :(得分:0)
我只需要像这样填充数组“组”:
[{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }]
带有json文件但没有jquery
答案 2 :(得分:0)
由于我没有在原始问题中注意到“没有jQuery”,所以这里有一个新答案:
var request = new XMLHttpRequest();
request.open('GET', './test.json', true);
request.onload = function() {
if (request.status >= 200 && request.status < 400) {
// Success!
var data = JSON.parse(request.responseText);
} else {
// We reached our target server, but it returned an error
}
};
它有两件事: 1.加载json文件 2.将加载的字符串解析为javascript对象。
答案 3 :(得分:-1)
如果您无法编辑原始文本,则需要将'替换为',然后进行JSON.parse(json.groups)
;
否则,您可以像这样更改您的json:
JSON.parse('[{ "id": 1, "title": "group 1" }, { "id": 2, "title": "group 2" }]')
请谨慎使用“和”括号
{
"key":"string"
}
用'括号定义的字符串无效
JSON键中的必须位于“”括号中
答案 4 :(得分:-1)
在使用JSON文件执行任何操作之前,您需要加载它。 jQuery有一个快捷方式,甚至可以自动为您将JSON字符串解析为本地JS对象:
$.getJSON('./test.json', function(data) {
console.dir(data);
});
答案 5 :(得分:-2)
您可以通过以下方式将对象解析为数组:
Object.values(YOUR_OBJECT)
docs:https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/values