Кодирование Python JSON - программирование
Подтвердить что ты не робот

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

Я пытаюсь закодировать данные в JSON на Python, и у меня возникла небольшая проблема. Я считаю, что проблема - просто недоразумение.

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

В настоящее время я объявляю список, перебираю цикл и другой список и добавляю один список в другой:

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

x = simplejson.loads(data)
# >>> typeError: expected string or buffer..

x = simplejson.dumps(stream)
# >>> [["apple", "cat"], ["banana", "dog"], ["pear", "fish"]]
# - shouldn't JSON encoded strings be like: {{"apple":{"cat"},{"banana":"dog"}}

Итак, я тоже:

  • Я не понимаю Синтаксис JSON
  • Я не понимаю модуль JSON Pythons
  • Я использую неприемлемый тип данных.
4b9b3361

Ответ 1

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

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

Ответ 2

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

>>> 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

Ответ 3

В simplejson (или в библиотеке json в Python 2.6 и более поздних версиях) loads берет строку 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.

Ответ 4

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

Из www.json.org:

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

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

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

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

Ответ 5

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

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

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

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

ожидаемая строка ('{{"apple":{"cat"},{"banana":"dog"}}') недействительна JSON. А

Ответ 6

Итак, 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, выйдет как объект.

Ответ 7

Try:

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: Основано на ответе Паоло.