当我试图从JSON字符串中获取列列表时,我遇到了这个问题。 我用ajax获取JSON字符串:
var jsonData = $.ajax({
method: "GET",
url: "read.jsp",
data: {title: option},
dataType: "json",
async: false
}).responseText;
我从列表中选择一个JSON文件,然后我就明白了
我试图用这个获取列名:
var newData= JSON.parse(jsonData).["0"];
for(var i = 0; i < newData.length; i++) {
var columnsIn = newData[i];
for(var key in columnsIn){
alert(key);
}
}
问题在于: [“0”] ,当我用第一个attribut的名称替换它时,它可以工作。
PS:Json文件不一样。
这是A json文件的例子:
{
"ASSETMboSet": {
"rsStart": 0,
"rsCount": 10,
"rsTotal": 1262,
"ASSET": [
{
"rowstamp": "[0 0 0 0 2 -100 91 -13]",
"Attributes": {
"ASSETNUM": {
"content": "1000"
},
"SERIALNUM": {
"content": "12346"
},
"VENDOR": {
"content": "1001"
},
"MANUFACTURER": {
"content": "1001"
},
"PURCHASEPRICE": {
"content": 0
},
"REPLACECOST": {
"content": 0
}, .....
这是另一个例子,因为它不是相同的json文件我想从中获取列名:{
"executionTime": "2018-02-16 05:49:04 AM",
"stationBeanList": [
{
"id": 72,
"stationName": "W 52 St & 11 Ave",
"availableDocks": 31,
"totalDocks": 39,
"latitude": 40.76727216,
"longitude": -73.99392888
},
{
"id": 79,
"stationName": "Franklin St & W Broadway",
"availableDocks": 19,
"totalDocks": 33,
"latitude": 40.71911552,
"longitude": -74.00666661}
答案 0 :(得分:0)
请勿使用async: false
。 自从
您必须到达"Attributes"
并获取Object.keys
的内容:
let data = {
"ASSETMboSet": {
"rsStart": 0,
"rsCount": 10,
"rsTotal": 1262,
"ASSET": [{
"rowstamp": "[0 0 0 0 2 -100 91 -13]",
"Attributes": {
"ASSETNUM": {
"content": "1000"
},
"SERIALNUM": {
"content": "12346"
},
"VENDOR": {
"content": "1001"
},
"MANUFACTURER": {
"content": "1001"
},
"PURCHASEPRICE": {
"content": 0
},
"REPLACECOST": {
"content": 0
}
}
}]
} // end ASSETMboSet
} // end data
let keys = Object.keys(data.ASSETMboSet.ASSET[0].Attributes)
console.log("keys = ", keys)
答案 1 :(得分:0)
两个JSON回应:
{
"ASSETMboSet": {
"rsStart": 0,
"rsCount": 10,
"rsTotal": 1262,
"ASSET": [
{
"rowstamp": "[0 0 0 0 2 -100 91 -13]",
"Attributes": {
"ASSETNUM": {
"content": "1000"
},
"SERIALNUM": {
"content": "12346"
},
"VENDOR": {
"content": "1001"
},
"MANUFACTURER": {
"content": "1001"
},
"PURCHASEPRICE": {
"content": 0
},
"REPLACECOST": {
"content": 0
}, .....
和
{ "executionTime": "2018-02-16 05:49:04 AM",
"stationBeanList": [
{ "id": 72, "stationName": "W 52 St & 11 Ave", "availableDocks": 31, "totalDocks": 39, "latitude": 40.76727216, "longitude": -73.99392888, "statusValue": "In Service", "statusKey": 1, "cationTime": "2018-02-16 05:47:06 AM" },
{ "id": 79, "stationName": "W 52 St & 11 Ave", "availableDocks": 31, "totalDocks": 39,
结构完全不同。
因此无法自动检测列名称。您需要知道所请求的JSON的结构,并根据该信息为每个查找列名的函数创建一个函数。
但是你无法创建一个魔术函数来提取任何 JSON响应的列名,而不知道响应的样子。