繁体   English   中英

如何在javascript中将JSON解析为JSON?

[英]How to parse JSON to JSON in javascript?

太疯狂了,但是我出于任何原因都试图将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)。 非常感谢。

该算法非常简单-应该可以执行以下操作:

 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(jd)); console.log(o); 

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

https://jsfiddle.net/de02fpha/

 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)); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

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

JSON.parse()将处理文本解析,而JSON.stringify可以处理解析后的JSON并转换为漂亮的字符串。

让我们一起拍打。

从解析和存储JSON开始:

var parsedData = JSON.parse(dataToFormat);

现在要打印解析后的数据,我们需要学习一些关于stringify函数的知识 ,特别是它的space参数。 每个MDN:

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

space参数可用于控制最终字符串中的间距。 如果它是一个数字,则在字符串化的连续级别中,每个级别都将缩进这个空格字符(最多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为您提供了一个标准对象,因此像对其他对象一样进行修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM