簡體   English   中英

Python-將json文件編寫為字典列表

[英]Python- writing json file as list of dictionaries

我正在從從URL提取的信息中編寫一個json文件。 如何在單獨的行上打印字典的每個元素?

這是我當前的代碼:

dct=[{"name": name,
        "cuisine": cuisine,
        "price-range": price,
        "address": address,
        "rating": rating,
        "reviews": score,
        "district": district,
        "url": link
        }]

    with open('openrice_data.json', 'a') as file:
        file.write(json.dumps(dct))

例如,它當前打印如下:

[{"cuisine": ["Japanese", "Hot Pot", "Buffet"], "rating": [3.5], "address": [22.3825, 114.1901], "url": ["https://www.openrice.com/en/hongkong/r-wagyu-more-sha-tin-japanese-hot-pot-r172321"], "reviews": [35, 17, 8], "name": "Wagyu More", "price-range": ["$101-200"], "district": ["Sha Tin"]}]

我希望它像這樣打印:

[
{"name": "Chan Kun Kee",
"cuisine": ["Guang Dong", "Dai Pai Dong"],
"price-range": "$51-100",
"address": [22.3884, 114.1958], 
"rating": 3.5,
"reviews": [216, 95, 38],
"district": "Shatin",
"url": "www.openrice.com/en/hongkong/r-chan-kun-kee-sha-tin-guangdong-r7918"
}
]

不要使用jsonpprint非常適合此工作。

from pprint import pprint

obj = [{"cuisine": ["Japanese", "Hot Pot", "Buffet"], "rating": [3.5], "address": [22.3825, 114.1901], "url": ["https://www.openrice.com/en/hongkong/r-wagyu-more-sha-tin-japanese-hot-pot-r172321"], "reviews": [35, 17, 8], "name": "Wagyu More", "price-range": ["$101-200"], "district": ["Sha Tin"]}]
with open('dumpfile.json', 'w+') as f:
    pprint(obj, f)

有一些自定義參數,請查看文檔以獲取更多詳細信息: https : //docs.python.org/3/library/pprint.html

更新實際上,您所擁有的是字典列表。 當您想添加更多元素時,需要刪除字典中的[]

為了解決您的特定問題,您想使用indent = 0。 還可以考慮直接使用json.dump。

import json

l=[]

dct={"name": 'name',
    "cuisine": 'cuisine',
    "price-range": 'price',
    "address": 'address',
    "rating": 'rating',
    "reviews": 'score',
    "district": 'district',
    "url": 'link'
    }

l.append(dct)

with open('openrice_data.json', 'w') as file:
    json.dump(l,file,indent=0)

輸出:

[
{
"name": "name",
"cuisine": "cuisine",
"price-range": "price",
"address": "address",
"rating": "rating",
"reviews": "score",
"district": "district",
"url": "link"
}
]

持續的

要添加更多元素,您需要執行以下操作:

# Load json to list
with open('openrice_data.json') as f:
    l = json.load(f)

# A new dict    
dct2={"name": 'name',
    "cuisine": 'cuisine',
    "price-range": 'price',
    "address": 'address',
    "rating": 'rating',
    "reviews": 'score',
    "district": 'district',
    "url": 'link'
    }

# Append new dict
l.append(dct2)


with open('openrice_data.json', 'w') as file:
    json.dump(l,file,indent=0)

現在,輸出包含一個包含2個字典的列表。

[
{
"name": "name",
"cuisine": "cuisine",
"price-range": "price",
"address": "address",
"rating": "rating",
"reviews": "score",
"district": "district",
"url": "link"
},
{
"name": "name",
"cuisine": "cuisine",
"price-range": "price",
"address": "address",
"rating": "rating",
"reviews": "score",
"district": "district",
"url": "link"
}
]

使用prettyprinter:

import pprint
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(dct)

另外:您當前正在將字典放在列表中。 []是列表{}是python中的字典。 通過將[{}]放入列表中。 只需刪除[]。

其他人已經評論過使用pprint ,但是我想補充一點, pprint打印字典中Python值的表示形式。 它們並不總是與JSON對應物相同,例如:

>>> from pprint import pprint
>>> d1 = {"value": None}
>>> pprint(d1)
{'value': None}

(此處正確的JSON序列化為{"value": null}

對於這些類型的值,更好的選擇是使用json.dumpjson.dumps 您可以使用indent參數排序使其在每個元素上打印一行。 請注意,盡管這也會將每個列表元素打印到其單獨的行中(因此,每個JSON鍵不會精確地獲得一行):

>>> d2 = [
... {"name": "Chan Kun Kee",
... "cuisine": ["Guang Dong", "Dai Pai Dong"],
... "price-range": "$51-100",
... "address": [22.3884, 114.1958], 
... "rating": 3.5,
... "reviews": [216, 95, 38],
... "district": "Shatin",
... "url": "www.openrice.com/en/hongkong/r-chan-kun-kee-sha-tin-guangdong-r7918"
... }
... ]
>>> print(json.dumps(d2, indent=2))
[
  {
    "name": "Chan Kun Kee",
    "cuisine": [
      "Guang Dong",
      "Dai Pai Dong"
    ],
    "price-range": "$51-100",
    "address": [
      22.3884,
      114.1958
    ],
    "rating": 3.5,
    "reviews": [
      216,
      95,
      38
    ],
    "district": "Shatin",
    "url": "www.openrice.com/en/hongkong/r-chan-kun-kee-sha-tin-guangdong-r7918"
  }
]

但是,您可以確保至少始終獲得正確的JSON。 另外,您還可以使用自己的JSON編碼器擴展行為。 例如,這允許您將Python datetime對象序列化為JSON字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM