2014-10-26 3 views
0

Вот мой файл JSON ниже. Каждый объект массива принадлежит идентификатору. Таким образом, первый объект будет #one, второй объект будет для #two. и так далее. Я не могу понять, как написать это в JavaScript. Как я могу настроить таргетинг на какой номер массива [1] с объектом [1], например, на #two? Также мне нужно удалить первую строку объекта, которая является линией подсчета? Спасибо!Как настроить целевой объект в файле JSON

чтобы получить более подробную информацию. Мне дали задание, где я разместил фотографии в html и под картинками, каждый объект в json-файле (описание для изображений) должен находиться под ним. Я новичок трейлеры и JSON Аякс :(поэтому #ONE IdS, #two ... был только примерами. Там будут 6 идентификаторов. Один для каждого объекта.

[ 
    [ 
    { 
    "count": "80", 
    "countTxt":"Buyer logins", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"523" 
    }, 
    { 
    "count": "233", 
    "countTxt":"Searches", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"628" 
    }, 
    { 
    "count": "533", 
    "countTxt":"Views of our member pages", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"2,365" 
    } 
    ], 
    [ 
    { 
    "count": "80", 
    "countTxt":"Total vists", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"412" 
    }, 
    { 
    "count": "53", 
    "countTxt":"Unique visitors", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"731" 
    }, 
    { 
    "count": "1:12 min", 
    "countTxt":"Total time spent on page", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"784.2 mins" 
    } 
    ] 
] 
+3

Эта структура немного странная, какова цель самого внешнего массива и почему объекты распределены между несколькими вложенными массивами? –

+0

Я перечислил более подробную информацию. это помогает? – user3730179

ответ

1

У вас есть массив, содержащие массивы, которые содержат объекты не имеют таких идентификаторов в любом месте и с такими именами, как #one, #two, и поэтому им неловко назначать их (в основном вы должны иметь список имен, ожидающих назначения).

Сама работа относительно проста после того, как у вас есть список:

  1. Разберите JSON в графе объектов через JSON.parse.

    var outerArray = JSON.parse(jsonText); 
    
  2. Создайте пустой объект, который вы можете сохранить названные объекты как свойства, как карта:

    var map = {}; 
    
  3. Тип в списке идентификаторов как массив:

    // This assumes no more than 99 elements 
    var ids = [ 
        "#one", "#two", "#three", /*...and so on...*/, "#ninety-nine" 
    ]; 
    
  4. Имейте индексную переменную, которая начинается с 0.

  5. Петля через самый дальний массив; у вас есть lots and lots of options for how to do that, я бы, вероятно, использовать forEach:

    outerArray.forEach(function(nestedArray) { 
        // ...more code here 
    }); 
    
  6. Внутри этого цикла, цикл через объекты в вложенном массиве:

    outerArray.forEach(function(nestedArray) { 
        nestedArray.forEach(function(object) { 
         // ...more code here 
        }); 
    }); 
    
  7. Внутри внутреннего контура, добавить текущий объект ваша карта, используя следующий доступный идентификатор с помощью переменного индекса:

    map[ids[index++]] = object; 
    
  8. Если вы действительно хотите, удалить count свойство от объекта:

    delete object.count; 
    

Так положить все это вместе:

var index = 0; 
var outerArray = JSON.parse(jsonText); 
var map = {}; 
var ids = [ // This assumes no more than 99 elements 
    "#one", "#two", "#three", /*...and so on...*/, "#ninety-nine" 
]; 
outerArray.forEach(function(nestedArray) { 
    nestedArray.forEach(function(object) { 
     map[ids[index++]] = object; 
     delete object.count; // Doesn't matter whether this is before or after the line above 
    }); 
}); 

Примечания:

  • Это будет очень неудобно доступ к этим объектам с Идентификаторы, такие как #one, и такие, но я предполагаю, что у вас есть причина для этого.Вы делаете map["#one"] и такие, чтобы попасть на объекты.

  • Если у вас нет , у вас есть, чтобы удалить объект count, не беспокойтесь.

-1

Вы можете получить доступ к свойствам, как показано ниже

json[0][0]["count"] 

Если вы хотите удалить использовать свойство

delete json[0][0]["count"] 

Fiddle http://jsfiddle.net/wa99rxgL/

1

Во-первых, вы можете спросить себя, если ваш текущий способ форматирования данных является подходящим. В настоящее время, ваши данные отформатированы как это:

var jsonObject = 
[ 
    [{},{},{}], 
    [{},{},{}] 
]; 

Где у вас есть самый верхний массив, который содержит два массива, и данные в формате JSON/JavaScript объекты затем сохранены внутри этих массивов. Вероятно, нет необходимости в самом удаленном массиве, и это упростит доступ к данным внутри вашего объекта json без него. Поэтому имейте в виду, что все примеры, которые вы получаете здесь, на SO, будут ссылаться на объект JSON, как вы его представили.

// List off all "countTxt" objects to demonstrate how to 
// iterate over a json object that contains nested 
// arrays containing data. In your example, you have two arrays 
// that each contain json data. 


for (var i in jsonObject) { 
    for (var j in jsonObject[i]){ 
     console.log(jsonObject[i][j].countTxt); 
    } 
} 

, приведенный выше цикл будет печатать следующее:

/* 
    Unique visitors 
    Total time spent on page 
    Buyer logins 
    Searches 
    Views of our member pages 
    Total vists 
    Unique visitors 
    Total time spent on page 
*/ 

Предупреждение:, как T.J. Кроудер указал, используя для .. в петли, чтобы получить доступ к данным json, вернутся, чтобы укусить вас, поэтому использование этого типа структуры цикла if.in (выше) не рекомендуется в производственном коде, но оно служит простая демонстрация того, как вы используете нотацию доступа [] для захвата значений из массива объектов данных. Чтобы ознакомиться с некоторыми передовыми методами, вы можете прочитать T.J. Глубокий пост Броудера по теме here.

Если вы хотите настроить таргетинг на конкретный пункт в JSONObject, вы делаете так, как это:

// Grab the second object in the data array: 
var secondObjectInJsonData = jsonObject[1]; 
console.log(secondObjectInJsonData); 
// secondObjectInJsonData -> [Object, Object, Object] 

Если вы хотите, чтобы захватить определенные данные внутри массива данных:

// Grab the second object, inside the first array of json data 
var countTxtOfSecondObject = jsonObject[0][2].countTxt; 
console.log(countTxtOfSecondObject); 
// countTxtOfSecondObject --> "Views of our member pages" 

Чтобы удалить объект, вы можете использовать команду delete

var someObject = jsonObject[1][2]; 
delete someObject.count; 
console.log("someObject after 'count' has been deleted: ", someObject); 

Here is a JSFiddle to see all this code in action. Просто откройте консоль в Chrome Developer Tools (в браузере Chrome), чтобы просмотреть выходные данные всех операторов console.log().

0

Прежде всего, вы должны переформатировать свои данные, попробуйте использовать JSON Editor Online, это показывает древовидную структуру ваших данных. Для этого доступно расширение Chrome. Пожалуйста, проверьте интернет-магазин Chrome. Это действительно хорошая практика.

Я переформатировал ваши данные и превратил их в нечто более читаемое.Взглянуть;

[ 
{ 
    "count": "80", 
    "countTxt":"Buyer logins", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"523" 
}, 
{ 
    "count": "233", 
    "countTxt":"Searches", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"628" 
}, 
{ 
    "count": "533", 
    "countTxt":"Views of our member pages", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"2,365" 
}, 
{ 
    "count": "80", 
    "countTxt":"Total vists", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"412" 
}, 
{ 
    "count": "53", 
    "countTxt":"Unique visitors", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"731" 
}, 
{ 
    "count": "1:12 min", 
    "countTxt":"Total time spent on page", 
    "participantsTxt":"Total for all participating member companies:", 
    "participantCount":"784.2 mins" 
    } 
] 

Вы можете получить доступ к данным с использованием JSON jQuery.getJSON() метода и использовать метод jQuery.each к петле через объект. Попробуйте это;

$.getJSON('data.json', function(data) { 
    $.each(data, function(k) { 
     console.log(data[k]); 
    }); 
}); 

Проверьте консоль (Ctrl + Shift + J). enter image description here

  1. Теперь вы можете легко получить доступ к строке. Например, console.log('Count: ' + data[k]['count']); // Отображает все счетчики.

Надеюсь, у вас есть идея, вы можете поиграть с объектом JSON таким образом и исправить меня, если я ошибаюсь. Thank You

Смежные вопросы