我有一个json文件需要拆分成数组,所以我可以填充select2下拉列表。
这里是json的格式:
[{
"entry_id": "MY_ID",
"title": "MY TITLE",
"url": "MY URL",
"count": "MY COUNT"
},
{
"entry_id": "MY_ID 2",
"title": "MY TITLE 2",
"url": "MY URL 2",
"count": "MY COUNT 2"
}]
我一直在使用这些javascript(一个更大的脚本的一部分):
data[i] = data[i].split(",\"title\": ");
data[i][0] = data[i][0].slice(13, -1);
data[i][1] = data[i][1].slice(1, -1);
为了提取"我的ID"和"我的标题"在下拉列表中使用的值,但已经意识到这是分成两个数组,我没有正确获得标题文本,这导致错误。
我想我需要分成三个地方:"标题":," url":" count":而不仅仅是" ;标题":
我认为没有办法让分割功能适用于多种模式?
答案 0 :(得分:0)
var obj = JSON.parse(json);
obj.entry_id;
应该够了。
答案 1 :(得分:0)
更新
由于您澄清了您确实拥有有效的JSON,因此只需使用下面的第一个示例而不添加大括号。
如果您只想要entry_id
和title
,则可以使用解构分配。
var d = `{
"entry_id": "MY_ID",
"title": "MY TITLE",
"url": "MY URL",
"count": "MY COUNT"
}`;
const {entry_id, title} = JSON.parse(d);
console.log(entry_id, title);
您显示的数据是自定义格式,而不是JSON。鉴于特定数据,您可以通过添加花括号将其转换为有效的JSON。这将让您解析和读取数据。
var d = `"entry_id": "MY_ID",
"title": "MY TITLE",
"url": "MY URL",
"count": "MY COUNT"`;
var json = "{" + d + "}";
var parsed = JSON.parse(json);
for (const [key, val] of Object.entries(parsed)) {
console.log(key, val);
}
或者如图所示那样的数据格式,一个简单的解析器应该很容易编写。这应该会给你一个良好的开端。
var d = `"entry_id": "MY_ID",
"title": "MY TITLE",
"url": "MY URL",
"count": "MY COUNT"`;
var parsed = parse(d);
for (const [key, val] of parsed) {
console.log(key, val);
}
function parse(d) {
var res = [];
var key, val;
while (d.length) {
[key, d] = parseString(d.trim());
d = d.trim();
if (d[0] !== ":") {
throw "Invalid data";
}
[val, d] = parseString(d.slice(1).trim());
res.push([key, val]);
d = d.trim();
if (d[0] !== ",") {
break;
}
d = d.slice(1)
}
if (d.length) {
throw "Invalid data";
}
return res
}
function parseString(d) {
var i = 0;
if (d[i++] !== '"') {
throw "Invalid string; expected open quote";
}
while (i < d.length && d[i] !== '"') {
i++;
}
if (d[i++] !== '"') {
throw "Invalid string; expected close quote";
}
return [d.slice(1, i - 1), d.slice(i)];
}
答案 2 :(得分:0)
将大括号添加到JSON数据以创建有效的JSON字符串。 将JSON字符串传递给JSON.parse()以创建对象。 按名称访问对象属性。
jsonString = '{"entry_id": "MY_ID", "title": "MY TITLE", "url": "MY URL", "count": "MY COUNT" }';
myObject = JSON.parse(jsonString);
entryId = myObject.entry_id;
title = myObject.title;
console.log(entryId);
console.log(title);