那太疯狂了,但是我试图将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)。非常感谢你。
答案 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;
答案 1 :(得分:2)
您可以使用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));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#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为您提供了一个标准对象,因此请像修改其他任何对象一样进行修改。