获取JSON字符串的列名称

时间:2018-02-16 13:24:37

标签: javascript json columnname

当我试图从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}

2 个答案:

答案 0 :(得分:0)

  1. 请勿使用async: false自从

  2. 您必须到达"Attributes"并获取Object.keys的内容:

  3. 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响应的列名,而不知道响应的样子。