Json файл загружается как список вместо dict. используя python - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь научиться получать информацию из файла json. Файл json размером 250 МБ находится на моем рабочем столе.

Я новичок в python и уверен, что мне чего-то не хватает, несмотря на то, что гугл неутомимо ищет ответ.

я понимаю, пока я загружаю файл Json, ожидаемым типом должен быть Dict.

import json

with open (r'c:\eseek\limitsdata.json) as f:
   data = json.load(f)

print type(data)

Я получаю как результат ... но не уверен, почему это не диктат, как я вижу во многих уроках

Я только что понял, что это похоже на уже доступный пост [{ ссылка }]

I хотел перейти к json, но пока я пытаюсь выполнить следующие шаги ... это не работает

data_str = json.dumps(data)
print(data_str[0])

Я не получаю первую вложенную группу, но получаю первую строку «[»

Я знаю, что что-то здесь не хватает. Будет здорово, если кто-то сможет выделить те же

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

[
    {
        "Model": " 500",
        "Task": “71-00-00-200-802 ",

    },
    {
        "Model": " 900",
        "Task": " 71-00-00-200-802",

    }
]

1 Ответ

0 голосов
/ 10 июля 2020

Если первый символ - «[», то файл json действительно должен быть проанализирован как список. Например,

a_list = json.loads("[ 'a', 'b', 'c' ] ")   # should give list [a,b,c]
a_dict = json.loads("{ 'data' : ['a', 'b', 'c']} ") # gives a dict

print(type(a_list), type(a_dict)) # should be list, dict
a_dict['data']  # can look up the field in this dict

Что касается вашей второй проблемы: если вы хотите перебрать элементы (первый элемент a_list выше - это элемент «a»), то оставьте это как список. Если вы хотите перебрать символов (первый символ json.dumps(a_list) - «[»), вы сначала преобразуете его в строку.

Преобразовывать не нужно json возвращается к строке, чтобы перебрать ее, и может просто выполнить

for item in a_list:
    print(item)

Редактировать: В частности, для ваших данных вы можете получить доступ к следующим полям:

with open (r'c:\eseek\limitsdata.json') as f:
   data = json.load(f)

print( data[0]["Model"] ) # prints '500'
print( data[1]["Task"] ) # prints ' 71-00-00-200-802'
...