JSON格式已关闭

时间:2019-02-08 18:35:22

标签: javascript jquery json ajax

键和值在我从api调用获得的Json对象中分开。我试图找到一种解决方案,它看起来如下:

{
  "range": "'1'!A1:AM243",
  "majorDimension": "ROWS",
  "values": 
    [
      "DeptID",
      "DeptDescr",
      "VP Area",
      "VP Descr",
      "HR Category",
      "Employee Relations1",
      "ER1Title",
      "ER1Phone",
      "ER1Email",
      "Employee Relations2",
      "ER2Title",
      "ER2Phone",
      "ER2Email",
      "Compensation1",
      "Comp1Title",
      "Comp1Phone",
      "Comp1Email",
      "Compensation2",
      "Comp2Title",
      "Comp2Phone",
      "Comp2Email",
      "Employment1",
      "E1Title",
      "E1Phone",
      "E1Email",
      "Employment2",
      "E2Title",
      "E2Phone",
      "E2Email",
      "Employee Pay Services1",
      "EPS1Title",
      "EPS1Phone",
      "EPS1Email",
      "Employee Pay Services2",
      "EPS2Title",
      "EPS2Phone",
      "EPS2Email"
    ],
    [
      "20734",
      "Academic Success Centers",
      "VES",
      "VP Enroll Mgmt & Student Aff",
      "Administrative",
      "Brian Schmidt",
      "  Employee Relations Consultant",
      "(928)523-6139",
      "Brian.Schmidt@nau.edu",
      "Marcia Warden",
      "Assistant Director, Employee Relations",
      "(928)523-9624",
      "Marcia.Warden@nau.edu",
      "Nicole Christian",
      "Employment & Compensation Analyst",
      "(928)523-6127",
      " Nicole.Christian@nau.edu",
      "Cathy Speirs",
      "Associate Director",
      "(928)523-6136",
      "Cathy.Speirs@nau.edu",
      "Nicole Christian",
      "Employment & Compensation Analyst",
      "(928)523-6127",
      " Nicole.Christian@nau.edu",
      "Cathy Speirs",
      "Associate Director",
      "(928)523-6136",
      "Cathy.Speirs@nau.edu",
      "Katherine Kurpierz",
      "Payroll Specialist",
      "(928)523-6129",
      "Katherine.Kurpierz@nau.edu",
      "Cheryl Brothers",
      "Assistant Director - HR Payroll Services",
      "(928)523-6085",
      "Cheryl.Brothers@nau.edu"
    ], etc.

但是我需要它看起来像:

[  
 {  
   "DeptID": 20734,  
   "DeptDescr": "Academic Success Centers",  
   "VP Area": "VES",  
   "VP Descr": "VP Enroll Mgmt & Student Aff",  
   "HR Category": "Administrative",  
   "Employee Relations1": "Brian Schmidt",  
   "Employee Relations2": "Marcia Warden",  
   "Compensation1": "Nicole Christian",  
   "Compensation2": "Cathy Speirs",  
   "Employment1": "Nicole Christian",  
   "Employment3": "Cathy Speirs",  
"Employee Pay Services1": "Katherine Kurpierz",  
   "Employee Pay Services2": "Cheryl Brothers"  
 },etc

我正在尝试使用数据使用javascript和ajax填充下拉列表。任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:0)

您的API返回的对象不是有效的JSON。该API是您制作的还是可以通过某种方式解决的?

有2件事可以使它起作用 -一个将其更改为完全返回您想要的内容; - Two 是要修复返回的内容,以便它是有效的JSON;

要查找最初发布的文件出了什么问题,让我们删除数组的内容,以便更轻松地发现问题:

您的原始数据大致如下:

{ "range": "'1'!A1:AM243",
  "majorDimension": "ROWS",
  "values": [],[]
}

要使其有效,您需要使其看起来像这样:

{ "range": "'1'!A1:AM243",
  "majorDimension": "ROWS",
  "values": {
    "keys": [],
    "data": [],
  }
}

请注意,我用{}包裹了两个“值”数组,因为如果要在其中包含两个数组,它必须是一个对象。 然后我给每个数组一个键,您可以用它来调用它们。这样,您就可以从“值”中获得所需的内容,从而使“键”数组中的每个项目在该“数据”数组中都有某些内容。

希望这会有所帮助。

答案 1 :(得分:0)

好吧,让我们看看;

假设这是您获得的响应数据的简短版本:

var res = `
{
    "range": "'1'!A1:AM243",
    "majorDimension": "ROWS",
    "values": [
        "DeptID",
        "DeptDescr",
        "VP Area"
    ],
    [
        "20734",
        "Academic Success Centers",
        "VES"
    ],
    [
        "345543",
        "Academic Fails Centers",
        "OK"
    ]
}
`;

正如我们从第一个数据可以看到的那样,它看起来像是来自各种电子表格的转储,并且有人编写了以JSON格式导出此数据的方法。值“数组”是此“电子表格”的行。

我们将清理它,并仅获取看起来像["value", "another value", "etc"]

的块
// clean tabs and returns
res = res.replace(/\t/g, '').replace(/\n/g, '');
// get the array-ish chunks
rows = res.match(/\[(((["'])(?:(?=(\\?))\4.)*?\3),*)+\]/gm)

现在让我们将它们设为真实数组:

var data = rows.map(function (row) {
  return JSON.parse(row);
});

现在,我们有了一个字符串数组数组。就是说,包含“单元格”值的“行”数组。第一个看起来像标题行(带有字段名称的行)

让我们使用除第一行以外的每一行数据创建对象。第一个将用作我们的键(我们将row [n]中的值与row [0]上的值的位置(索引)进行匹配,以获得键值对)

// Here we will define an object to store data
var data_object = { values: [] };

// for each row except the first
for(var i = 1; i < data.length; i++) {
  var my_data = {};
  //for each element of this row
  for(var j = 0; j < data[i].length; j++) {
    my_data[data[0][j]] = data[i][j];
  }
  data_object.values.push(my_data);
}

我们有一个对象,让我们假设您现在需要JSON格式的

var json_data = JSON.stringify(data_object);
// let's look what we have here
console.log('json_data:', json_data);

结果将是这样的:

json_data: {"values":[{"DeptID":"20734","DeptDescr":"Academic Success Centers","VP Area":"VES"},{"DeptID":"345543","DeptDescr":"Academic Fails Centers","VP Area":"OK"}]}

现在警告:

如果可以修复API,这是您不希望做的,您首先要获取此数据。如果出现任何不一致的地方,事情将会破裂。在此示例中,我不管理任何边缘情况或异常,也不检查数组的边界或将内容包装在try-catch块中。