如何在javascript中解析JSON到JSON?

时间:2016-10-27 03:17:44

标签: javascript jquery json

那太疯狂了,但是我试图将JSON转换为JSON,因为任何原因。我有json,我在http://jsonlint.com检查了json,没关系。

{"d": "[{\"ID\":\"VN00000123\",\"NAME\":\"JOHN GREEN\",\"GENDER\":\"Male\",\"BIRTHDAY\":\"15-10-1987\"},{\"ID\":\"VN00000456\",\"NAME\":\"MERRY BLUE\",\"GENDER\":\"Female\",\"BIRTHDAY\":\"03-12-1983\"},{\"ID\":\"VN00000789\",\"NAME\":\"BLACK BROWN\",\"GENDER\":\"Male\",\"BIRTHDAY\":\"09-07-1990\"}]"}

现在,我需要将其转换为以下内容

{
    "columns": [
        ["ID"],
        ["NAME"],
        ["GENDER"],
        ["BIRTHDAY"]
    ],
    "data": [
        [
            "VN00000123",
            "JOHN GREEN",
            "Male",
            "15-10-1987"
        ],
        [
            "VN00000456",
            "MERRY BLUE",
            "Female",
            "03-12-1983"
        ],
        [
            "VN00000789",
            "BLACK BROWN",
            "Male",
            "09-07-1990"
        ]
    ]
}

有人对此有所想法,与我分享(使用javascript或jquery)。非常感谢你。

3 个答案:

答案 0 :(得分:3)

这个算法非常简单 - 类似下面的内容应该有效:



function parse(a) {
  //create object to return
  var ret = {
    columns: [],
    data: []
  };

  //iterate the source array
  a.forEach(function(item, i) {
    if (i === 0) {
      //first time through, build the columns
      for (var key in item) {
        ret.columns.push(key);
      }
    }

    //now build your data item
    ret.data[i] = [];

    //use the column array to guarantee that the order of the fields in the source string doesn't matter
    for (var j = 0; j < ret.columns.length; j++) {
      var key = ret.columns[j];
      ret.data[i].push(item[key]);
    }
  });
  return ret;
}

var j = {
  "d": "[{\"ID\":\"VN00000123\",\"NAME\":\"JOHN GREEN\",\"GENDER\":\"Male\",\"BIRTHDAY\":\"15-10-1987\"},{\"NAME\":\"MERRY BLUE\",\"BIRTHDAY\":\"03-12-1983\",\"ID\":\"VN00000456\",\"GENDER\":\"Female\"},{\"GENDER\":\"Male\",\"ID\":\"VN00000789\",\"NAME\":\"BLACK BROWN\",\"BIRTHDAY\":\"09-07-1990\"}]"
};

//j is an object with one property (d) that is a JSON string that needs parsing
var o = parse(JSON.parse(j.d));
console.log(o);
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您可以使用jQuery尝试此示例:

https://jsfiddle.net/de02fpha/

&#13;
&#13;
var dump = {"d": "[{\"ID\":\"VN00000123\",\"NAME\":\"JOHN GREEN\",\"GENDER\":\"Male\",\"BIRTHDAY\":\"15-10-1987\"},{\"ID\":\"VN00000456\",\"NAME\":\"MERRY BLUE\",\"GENDER\":\"Female\",\"BIRTHDAY\":\"03-12-1983\"},{\"ID\":\"VN00000789\",\"NAME\":\"BLACK BROWN\",\"GENDER\":\"Male\",\"BIRTHDAY\":\"09-07-1990\"}]"};

var parse = function(json) {
  var columns = [];
  var data = [];
  $.each(json, function(index, row) {
    var element = [];
    for (var key in row) {
      if (columns.indexOf(key) == -1)	columns.push(key);
      element.push(row[key]);
    }
    data.push(element);
  });

  return {columns: columns, data: data};
};


var json = $.parseJSON(dump.d);
console.log(parse(json));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

在javascript中,内置的JSON类提供了格式化JSON所需的两个工具,不需要jquery:

JSON.parse()将处理解析文本,JSON.stringify可以处理我们解析的JSON并变成漂亮的漂亮字符串。

让他们一起拍打。

从解析和存储JSON开始:

var parsedData = JSON.parse(dataToFormat);

现在要打印我们的解析数据,我们需要了解一点stringify function,特别是它的space参数。按MDN:

  

JSON.stringify(value[, replacer[, space]])

     

space参数可用于控制最终字符串中的间距。如果是数字,则字符串化中的连续级别将由这么多空格字符(最多10个)缩进。如果是字符串,则连续的级别将由此字符串(或其前10个字符)缩进。

JSON.stringify({ uno: 1, dos: 2 }, null, '\t');
// returns the string:
// '{
//     "uno": 1,
//     "dos": 2
// }'

请注意,上面的代码示例使用制表符,但如文档中所述,您只需插入一个数字,它就会使用该数量的空格。

好吧,让我们打印

var prettyData = JSON.stringify(parsedData, null, '\t');

prettyData现在应该包含一个整齐格式化和缩进的字符串。

如果您愿意,可以将其分成一行:

var prettyData = JSON.stringify(JSON.parse(dataToFormat),null,'\t');

现在,如果您想在JSON对象的顶部添加一个键或其他东西,您可以简单地定义某种键对象并将其附加到传递给JSON.stringify的对象。 JSON.parse为您提供了一个标准对象,因此请像修改其他任何对象一样进行修改。