2017-02-07 3 views
1

Как правильно хранить данные в JSON-подобном объекте? Из того, что я видел, существует два способа хранения данных внутри объекта json. Оба имеют различные способы доступа к данным (примеры в Python):Фундаментальная структура объектов типа JSON?

Вариант 1:

obj1 = [ 
    {"id": 1, "payload": "a"}, 
    {"id": 2, "payload": "b"}, 
    {"id": 3, "payload": "c"}, 
] 

доступа полезной нагрузки определенных идентификаторов в варианте 1:

for element in obj1: 
    if element["id"] == 2: 
     print(element["payload"]) 

Это означает, что весь список элементов необходимо отсканировать (возможно), чтобы найти правильный id и вернуть его значение.

С другой стороны Theres Вариант 2:

obj2 = { 
    1: "a", 
    2: "b", 
    3: "c", 
} 

Чтобы получить доступ к полезной нагрузки второго «ид» просто:

print(obj2[2]) 

Мой вопрос теперь, почему это больше распространено см. вариант 1, хотя это кажется более сложным для поиска? Когда я буду использовать вариант 1 и вариант 2?

+1

Зависит от прецедента ... – charlietfl

+2

Ну, у вас есть массив объектов против одного объекта - так что вам решать, что правильно для задачи. Что касается расширения и удобочитаемости, я бы сказал, что первый вариант лучше. Хотите добавить новую недвижимость? Вы не можете сделать это с помощью опции два. Кроме того, вы всегда можете использовать только один массив для варианта 2, он не обязательно должен быть объектом. – JCoulam

+0

Существует также опция 3, которая является объектом объектов – apokryfos

ответ

1

Помимо технических артефактов, которые каким-то образом эволюционировали, вариант имеет смысл в случае важности порядка элементов.

2

Мы должны уточнить некоторые термины.

Когда вы помещаете список значений в [], вы создаете массив; он определяется индексом массива, а не каким-либо элементом данных.

Когда вы кладете список ключей и значений в {}, вы создаете объект; вы можете, как вы заметили, найти значение, если знаете соответствующий ключ.

Есть many Различия между двумя структурами. В конкретном случае использования сайта вы хотите найти экземпляр данных на основе одного из значений его поля - объекта, который использует это поле в качестве ключа.

Но ключи объекта являются неупорядоченными. И массивы более естественны, чтобы вы перебирали все их элементы.

Это зависит от того, что вы собираетесь делать со значениями; поэтому существует не только одна структура данных.

+0

Итак, скажем, вместо массива, у меня есть объект 'obj1 = {" data ": []}'. Теперь у меня есть два объекта. Я часто вижу этот тип объекта в качестве ответов от веб-сервисов. Думаю, мой вопрос в основном направлен на идентификаторы. Почему идентификаторы всегда хранятся как опция2? – user1211030

+0

Я не вижу, что он должен делать с чем-либо, будь вы обертываете массив внутри объекта. Причина, по которой люди иногда используют массивы вместо объектов, - это иногда нужны структуры данных, которые имеют характеристики массивов, а не объектов. –

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

  • Нет связанных вопросов^_^