Формат JSON выключен - PullRequest
       2

Формат JSON выключен

0 голосов
/ 08 февраля 2019

Ключи и значения разделены в объекте Json, который я получаю из вызова API.Я попытался найти решение. Это выглядит следующим образом:

{
  "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 голосов
/ 09 февраля 2019

Хорошо, давайте посмотрим;

Предположим, это короткая версия полученных вами ответов:

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.

0 голосов
/ 09 февраля 2019

Объект, который возвращает ваш API, не является допустимым JSON.Это API было сделано вами, или вы можете как-то это исправить?

Есть две вещи, которые вы могли бы сделать, чтобы это работало - Один - это изменить его так, чтобы он возвращал именно то, что вы хотите;- Два - это исправить то, что он возвращает, чтобы он был действительным JSON;

Если у вас что-то не так с файлом, который вы изначально разместили, давайте удалим содержимое массивов, чтобы было прощеЧтобы определить проблему:

Ваши исходные данные выглядят примерно так:

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

Чтобы быть действительным, вам нужно, чтобы они выглядели так:

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

Примечаниечто я обернул два массива «значений» с помощью {}, потому что это должен быть объект, если вы хотите, чтобы он содержал в себе два массива.Затем я дал каждому массиву ключ, с помощью которого вы можете вызывать их.С этим вы сможете получить то, что вы хотите от ваших «значений», так что для каждого элемента в массиве «ключей» у вас есть что-то в этом массиве «данных».

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...