如何在多个地方拆分javascript

时间:2017-11-18 17:03:20

标签: javascript json

我有一个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":而不仅仅是" ;标题":

我认为没有办法让分割功能适用于多种模式?

3 个答案:

答案 0 :(得分:0)

var obj = JSON.parse(json);
obj.entry_id;

应该够了。

答案 1 :(得分:0)

更新

由于您澄清了您确实拥有有效的JSON,因此只需使用下面的第一个示例而不添加大括号。

如果您只想要entry_idtitle,则可以使用解构分配。

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);

https://jsfiddle.net/g9ko8tk9/