Python кодирование JSON

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

Например, концепция арифметики указателей была для меня чужой, пока я уже несколько лет не использовал C ++:

Примеры:

  • c [0] эквивалентно * c
  • c [1] эквивалентно * (c + 1)
  • Итерация цикла: for (char * c = str; * c! = '\ 0'; c ++)
  • и т. Д. ...

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

РЕДАКТИРОВАТЬ: Как я обратил на себя внимание комментарием, который я только что прочитал на другой ответ, я думаю, что есть также некоторая ценность в обсуждении тонких различий между указателями и массивами (и как поставить два вместе, чтобы облегчить некоторые довольно сложные структуры), а также о том, как правильно использовать ключевое слово const по отношению к объявлениям указателей.

51
задан KeyboardInterrupt 11 June 2009 в 10:37
поделиться

7 ответов

Python списки переводятся в массивы JSON . Он дает вам совершенно допустимую строку JSON, которую можно использовать в приложении Javascript. Чтобы получить то, что вы ожидали, вам нужно будет использовать dict :

>>> json.dumps({'apple': 'cat', 'banana':'dog', 'pear':'fish'})
'{"pear": "fish", "apple": "cat", "banana": "dog"}'
67
ответ дан 7 November 2019 в 09:58
поделиться

Я думаю, вы просто обмениваетесь дампами и нагрузки .

>>> import json
>>> data = [['apple', 'cat'], ['banana', 'dog'], ['pear', 'fish']]

Первый возвращает в виде строки (в кодировке JSON) свой аргумент данных:

>>> encoded_str = json.dumps( data )
>>> encoded_str
'[["apple", "cat"], ["banana", "dog"], ["pear", "fish"]]'

Второй делает противоположное, возвращая данные, соответствующие его строковому аргументу (в кодировке JSON):

>>> decoded_data = json.loads( encoded_str )
>>> decoded_data
[[u'apple', u'cat'], [u'banana', u'dog'], [u'pear', u'fish']]
>>> decoded_data == data
True
20
ответ дан 7 November 2019 в 09:58
поделиться

В simplejson (или библиотеке json в Python 2.6 и более поздних версиях) load принимает строку JSON и возвращает Структура данных Python, dumps принимает структуру данных Python и возвращает строку JSON. Строка JSON может кодировать массивы Javascript, а не только объекты, а список Python соответствует строке JSON, кодирующей массив. Чтобы получить строку JSON, например

{"apple":"cat", "banana":"dog"}

, объект Python, который вы передаете в json.dumps , может быть:

dict(apple="cat", banana="dog")

, хотя строка JSON также является допустимым синтаксисом Python для того же dict . Однако я считаю, что конкретная строка, которую вы ожидаете, просто неверный синтаксис JSON.

17
ответ дан 7 November 2019 в 09:58
поделиться

Данные, которые вы кодируете, представляют собой массив без ключей, поэтому JSON кодирует их с помощью скобок []. См. Www.json.org для получения дополнительной информации об этом. Фигурные скобки используются для списков с парами ключ / значение.

Из www.json.org:

JSON построен на двух структурах:

Коллекция пар имя / значение. В на разных языках это реализовано как объект, запись, структура, словарь, хэш-таблица, ключевой список или ассоциативный массив. Упорядоченный список значений. В в большинстве языков это реализовано как массив, вектор, список или последовательность.

Объект - это неупорядоченный набор пары имя / значение. Объект начинается с {(левая фигурная скобка) и заканчивается на} (правая скобка). За каждым именем следят по: (двоеточие) и парам имя / значение разделены, (запятая).

Массив - это упорядоченный набор ценности. Массив начинается с [(слева скобка) и заканчивается] (справа скобка). Значения разделены, (запятая).

4
ответ дан 7 November 2019 в 09:58
поделиться

JSON использует квадратные скобки для списков ( [«один», «два», «три»] ) и фигурные скобки для словарей ключей / значений (также называемых объектами в JavaScript, {"one": 1, "two": "b"} ).

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

если вам нужен словарь, может быть что-то вроде этого:

x = simplejson.dumps(dict(data))
>>> {"pear": "fish", "apple": "cat", "banana": "dog"}

ваша ожидаемая строка (' {{"apple": {"cat"}, {"banana": "dog"}} ') ​​недопустимый JSON. A

3
ответ дан 7 November 2019 в 09:58
поделиться

Итак, simplejson.loads принимает строку json и возвращает структуру данных, поэтому вы получаете там ошибку этого типа.

simplejson.dumps (data) возвращается с

'[["apple", "cat"], ["banana", "dog"], ["pear", "fish"]]'

] Это json-массив, который вам и нужен, поскольку вы дали ему массив python.

Если вы хотите получить синтаксис типа «объект», вы вместо этого сделаете

>>> data2 = {'apple':'cat', 'banana':'dog', 'pear':'fish'}
>>> simplejson.dumps(data2)
'{"pear": "fish", "apple": "cat", "banana": "dog"}'

, который является javascript, будет отображаться как объект.

3
ответ дан 7 November 2019 в 09:58
поделиться

Попробуйте:

import simplejson
data = {'apple': 'cat', 'banana':'dog', 'pear':'fish'}
data_json = "{'apple': 'cat', 'banana':'dog', 'pear':'fish'}"

simplejson.loads(data_json) # outputs data
simplejson.dumps(data) # outputs data_joon

NB: На основе ответа Паоло.

3
ответ дан 7 November 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: