2016-11-02 2 views
2

У меня есть словарь python с ключами в формате Aa123, и каждое значение представляет собой список. Теперь мне нужно постоянно хранить эти данные в каком-либо формате или в любой базе данных, чтобы я мог легко получить их. Я думал, что JSON будет лучше для этого и попытался сохранить все данные в формате JSON, а затем какое-то приложение могло бы использовать этот файл. Мой формат JSON должен быть, какХранить словарь python в файле JSON динамически

[ 
    { "firstLetter" : "A", 
    "remaining" : [ 
     { 
      "secondLetter" : "a", 
      "ID" : [ 
       {"id" : "Aa123", "listOfItems" : ["ABC123","ASD100"]}, 
       {"id" : "Aa100", "listOfItems" : ["ABC123","COD101"]} 
      ] 
     }, 
     { 
      "secondLetter" : "b", 
      "ID" : [ 
       {"id" : "Ab100", "listOfItems" : ["ABC123","ASD100"]} 
      ] 
     } 
    ] 
    }, 
    { "firstLetter" : "B", 
    "remaining" : [ 
     { 
      "secondLetter" : "a", 
      "ID" : [     
       {"id" : "Ba106", "listOfItems" : ["AUD123","CML101"]} 
      ] 
     }, 
     { 
      "secondLetter" : "b", 
      "ID" : [ 
       {"id" : "Bb153", "listOfItems" : ["AER113","ASD100"]}, 
       {"id" : "Bb100", "listOfItems" : ["ATC123","ASD500"]} 
      ] 
     } 
    ] 
    } 
] 

Я знаю, как сбросить питон словарь в JSON, но не обеспечивает простой запрос данных. Мой вопрос: «Как сохранить этот словарь python (который я получил, запустив программу python) в требуемом формате (как показано выше), что упрощает запрос данных. Спасибо!

+2

Что ваш вопрос? –

+2

Проверьте наличие баз данных NoSQL, таких как MongoDB. Это то, что вам нужно –

+0

'loadeddict = json.loads (retrieveddata)'? – RickyA

ответ

1

кроме базы данных NoSQL, как MongoDB и Cassandra, если вы используете PostgreSQL, посмотрите на тип hstore данных, в частности, psycopg2-х hstore функциональность Это может помочь, если вы хотите иметь возможность запросить ваш da ta более легко.

1

В приведенном ниже примере я вывожу данные в JSON, а также сохраняю dict, используя Shelves.

import json 
import codecs 
import shelve 

formatted_item = { 
    "data": [ 
     { "firstLetter" : "A", 
     "remaining" : [ 
      { 
       "secondLetter" : "a", 
       "ID" : [ 
        {"id" : "Aa123", "listOfItems" : ["ABC123","ASD100"]}, 
        {"id" : "Aa100", "listOfItems" : ["ABC123","COD101"]} 
       ] 
      }, 
      { 
       "secondLetter" : "b", 
       "ID" : [ 
        {"id" : "Ab100", "listOfItems" : ["ABC123","ASD100"]} 
       ] 
      } 
     ] 
     }, 
     { "firstLetter" : "B", 
     "remaining" : [ 
      { 
       "secondLetter" : "a", 
       "ID" : [     
        {"id" : "Ba106", "listOfItems" : ["AUD123","CML101"]} 
       ] 
      }, 
      { 
       "secondLetter" : "b", 
       "ID" : [ 
        {"id" : "Bb153", "listOfItems" : ["AER113","ASD100"]}, 
        {"id" : "Bb100", "listOfItems" : ["ATC123","ASD500"]} 
       ] 
      } 
     ] 
     } 
    ] 
} 


### 
# JSON 

# *** Store 

output = json.dumps(dict(formatted_item), sort_keys=True, indent=4, separators=(',', ': ')) 
json_file_path = 'temp.json' 
with codecs.open(json_file_path, 'wb', encoding='utf8') as file: 
    file.write(output) 

# *** Read 

with open(json_file_path) as json_file: 
    json_data = json.load(json_file) 

# *** Print 

print json_data 
print json_data['data'][0]['firstLetter'] 


### 
# Shelves 

# *** Store 

shelf_file_path = 'temp.log' 
shelf = shelve.open(shelf_file_path) 
shelf.update(formatted_item) 
shelf.close() 

# *** Read 

loaded_shelf = shelve.open(shelf_file_path) 

# *** Print 

print loaded_shelf 
print loaded_shelf['data'][0]['firstLetter'] 
-1

СУБД не очень хорошо разбирается в запросе JSON.

Теперь вы можете сохранить JSON-файл в поддерживаемых РСУБД, NoSQL для быстрого запроса. Тем не менее, СУБД, поддерживающие тип данных JSON, попробуйте обходной путь, уменьшая структуру json и индексируя их в массовом порядке. NoSQL не лучше РСУБД при работе с типом данных json.

Поэтому перед хранением json-файла вы должны всегда читать определенную документацию по РСУБД/NoSQL, особенно если у вас есть тонны json-данных.

1

Похоже, вы можете воспользоваться tinydb. Он сохраняет значения непосредственно в файле JSON и предоставляет методы для запросов.

Так хранить свои ценности, мы делаем

from tinydb import TinyDB, Query 

db = TinyDB('test.json') 
values = [{'firstLetter': 'A', 
    'remaining': [{'ID': [{'id': 'Aa123', 'listOfItems': ['ABC123', 'ASD100']}, 
    {'id': 'Aa100', 'listOfItems': ['ABC123', 'COD101']}], 
    'secondLetter': 'a'}, 
    {'ID': [{'id': 'Ab100', 'listOfItems': ['ABC123', 'ASD100']}], 
    'secondLetter': 'b'}]}, 
{'firstLetter': 'B', 
    'remaining': [{'ID': [{'id': 'Ba106', 'listOfItems': ['AUD123', 'CML101']}], 
    'secondLetter': 'a'}, 
    {'ID': [{'id': 'Bb153', 'listOfItems': ['AER113', 'ASD100']}, 
    {'id': 'Bb100', 'listOfItems': ['ATC123', 'ASD500']}], 
    'secondLetter': 'b'}]}] 
for value in values: 
    db.insert(value) 

Для запроса, мы делаем

>>> Q = Query() 
>>> db.search(Q.firstLetter == "A") 

[{'firstLetter': 'A', 
    'remaining': [{'ID': [{'id': 'Aa123', 'listOfItems': ['ABC123', 'ASD100']}, 
    {'id': 'Aa100', 'listOfItems': ['ABC123', 'COD101']}], 
    'secondLetter': 'a'}, 
    {'ID': [{'id': 'Ab100', 'listOfItems': ['ABC123', 'ASD100']}], 
    'secondLetter': 'b'}]}]