JQuery JSON [объект Объект] - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть JSON, который структурирован так:

студентов. json (ОБНОВЛЕНО ИЗ КОММЕНТАРИЙ НИЖЕ)

{
  Cindy: { age: 9, m1: 80, m2: 90, s1: 90, s2: 100 },
  Mark: { age: 12, m1: 80, m2: 90, s1: 90, s2: 100 },
  Jeff: { age: 8, m1: 90, m2: 90, s1: 90, s2: 95 },
  Ann: { age: 11, m1: 90, m2: 60, s1: 90, s2: 100 },
  Jason: { age: 5, m1: 95, m2: 30, s1: 90, s2: 185 },
  Harvey: { age: 10, m1: 100, m2: 70, s1: 90, s2: 100 },
  Mike: { age: 9, m1: 100, m2: 80, s1: 90, s2: 82 },
  Ross: { age: 9, m1: 88, m2: 90, s1: 90, s2: 100 },
};

В моем коде javascript я импортируя несколько JSON с использованием JQuery.

var objects = {};
$.getJSON("object1.json", function (data) {
  objects = data;
});

var students = {};
$.getJSON("info.json", function (data) {
  students = data;
});

// .......

function function1(object) {}
function function2(object) {}

// .......

function main() {
  function1(object1);
  function2(object2);
}

Когда я проверяю импортированные объекты студентов, я получаю:

[object Object]:{
"Cindy"   : {"age": 9,     "m1":80,  "m2":90, "s1":90 , "s2":100},
"Mark"    : {"age": 12,    "m1":80,  "m2":90, "s1":90 , "s2":100},
"Jeff"    : {"age": 8,     "m1":90,  "m2":90, "s1":90 , "s2":95},
"Ann"     : {"age": 11,    "m1":90,  "m2":60, "s1":90 , "s2":100},
"Jason"   : {"age": 5,     "m1":95,  "m2":30, "s1":90 , "s2":185},
"Harvey"  : {"age": 10,    "m1":100, "m2":70, "s1":90 , "s2":100},
"Mike"    : {"age": 9,     "m1":100, "m2":80, "s1":90 , "s2":82},
"Ross"    : {"age": 9,     "m1":88,  "m2":90, "s1":90 , "s2":100}
}

Похоже, что этот [объект объекта] теперь «ключ»?

ОБНОВЛЕНО:

Мой первоначальный вопрос был связан с мыслью, что это мешает мне получить доступ к объекту, но это не было моей проблемой. Работает как положено. Я могу получить доступ к Students.Cindy.age // 9 очень хорошо. Моя проблема в том, что get JSON происходит ПОСЛЕ вызова функции, поэтому «неопределенные» объекты передаются в функции. Сначала мне нужно загрузить html, так как некоторые функции javascript манипулируют страницей html.

Ответы [ 3 ]

0 голосов
/ 04 апреля 2020

Устраните проблемы с отсутствующими запятыми вокруг свойств массива и назначьте внешний объект переменной. Затем вы можете использовать скобки / точечные обозначения для доступа к свойствам. Вам также следует исправить отступ вложенных объектов, чтобы сделать ваш код более легким для чтения.

Извлеките этот пример .

var data = {
    "Cindy": {
        "age": 9,     
        "m1": 80,  
        "m2": 90, 
        "s1": 90, 
        "s2": 100
     },
    "Mark": {
        "age": 12,    
        "m1": 80,  
        "m2": 90, 
        "s1": 90, 
        "s2": 100
     }
}

Теперь к данным обращается следующий код:

alert(data["Cindy"].age);
alert(data["Mark"].m1);
0 голосов
/ 05 апреля 2020

Есть несколько проблем. $.getJSON("info.json" это асин c по своей природе. Вместо $ .get JSON вы можете использовать fetch Он имеет лучшую поддержку. Использование запросов на выборку. Promise.all дождитесь ответов, затем вы сможете выполнить задание.

$(function () {
  function function1(objects) {
    console.log(objects)
  }
  function function2(students) {
    console.log(students.Cindy.age)
    console.log(students.Cindy.m1)
  }
  /*
  var objects = {};
  $.getJSON("object1.json", function (data) { // these are async in nature
    objects = data;
  });
  var students = {};
  $.getJSON("info.json", function (data) { // these are async in nature
    students = data;
  });
  */
  // instead of $.getJSON, u can use `fetch` It has better support
  const promises = [fetch("object1.json").then(res => res.json()) , fetch("info.json").then(res => res.json()]
  Promise.all(promises).then((results) => {
    const [objects, students] = results// data is avaible here, 
    function1(objects); // do something with objects
    function2(students);// do something with students
  })


})();
0 голосов
/ 04 апреля 2020

вы можете получить доступ как следующие 2 типа

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