Json 文件到字典

Posted

技术标签:

【中文标题】Json 文件到字典【英文标题】:Json file to dictionary 【发布时间】:2016-03-08 18:37:49 【问题描述】:

我正在使用yelp dataset,我想将评论 json 文件解析为字典。我尝试将其加载到 pandas DataFrame 上,然后创建字典,但由于文件太大,因此非常耗时。我只想保留 user_id 和 stars 值。 json文件的一行是这样的:


    "votes": 
        "funny": 0, "useful": 2, "cool": 1,
    "user_id": "Xqd0DzHaiyRqVH3WRG7hzg",
    "review_id": "15SdjuK7DmYqUAj6rjGowg", "stars": 5, "date": "2007-05-17",
    "text": (
        "dr. goldberg offers everything i look for in a general practitioner.  "
        "he's nice and easy to talk to without being patronizing; he's always on "
        "time in seeing his patients; he's affiliated with a top-notch hospital (nyu) "
        "which my parents have explained to me is very important in case something "
        "happens and you need surgery; and you can get referrals to see specialists "
        "without having to see him first.  really, what more do you need?  i'm "
        "sitting here trying to think of any complaints i have about him, but i'm "
        "really drawing a blank."
    ),
    "type": "review", "business_id": "vcNAWiLM4dR7D2nwwJ7nCA"

我如何遍历每个“字段”(因为缺少更好的词)?到目前为止,我只能遍历每一行。

编辑

根据要求的熊猫代码:

读取 json

with open('yelp_academic_dataset_review.json') as f:
    df = pd.DataFrame(json.loads(line) for line in f)

创建字典

dict =  

for i, row in df.iterrows():
   business_id = row['business_id']
   user_id = row['user_id']
   rating = row['stars']
   key = (business_id, user_id)
   dict[key] = rating

【问题讨论】:

Iteratively parse JSON file的可能重复 有没有其他方法可以只使用熊猫? 显示您的 pandas 代码以读取 json 并将其转换为字典。 将此作为一般性评论添加,因为它不是特定于我的答案,您可能会考虑是否该建立数据库。对于大数据集,将内容存储在内存、平面文件或 json 文件中不再实用,是时候使用数据库了。不知道你是否在那个时候,但要记住这一点。 Python 有sqlite3——你也可以和sqlalchemy一起使用——满足“简单”的数据库需求。 我想坚持使用 pandas,我认为字典是 pandas 中用于我想做的操作的最快的数据结构。之后我想找到一些特定的用户,例如对独特的地方进行了 50 多次评论的用户。 【参考方案1】:

您无需将其读入 DataFrame。 json.load() 返回一个字典。例如:

sample.json

“投票”: “有趣”:0, “有用”:2, “酷”:1 , "user_id": "Xqd0DzHaiyRqVH3WRG7hzg", "review_id": "15SdjuK7DmYqUAj6rjGowg", “星星”:5, "日期": "2007-05-17", “text”:“goldberg 博士提供了我在全科医生中寻找的一切。他很好,很容易与人交谈,而且不会居高临下;他总是准时看病;他隶属于一流的医院 (nyu),该医院我的父母已经向我解释了这非常重要,以防万一发生了什么事,你需要手术;而且你可以得到转介去看专科医生,而不必先去看他。真的,你还需要什么?我坐在这里想我对他有任何抱怨,但我真的是一片空白。", “类型”:“评论”, “business_id”:“vcNAWiLM4dR7D2nwwJ7nCA”

read_json.py

import json

with open('sample.json', 'r') as fh:
    result_dict = json.load(fh)

print(result_dict['user_id'])
print(result_dict['stars'])

输出

Xqd0DzHaiyRqVH3WRG7hzg 5

使用该输出,您可以轻松创建 DataFrame。

关于将 json 解析为 SO 上的流有几个很好的讨论,但要点是它本身是不可能的,尽管一些工具似乎在尝试它。

为了让您的代码保持简单且依赖最少,您可能会看看将 json 目录读入字典是否足够改进。

【讨论】:

我已经尝试过了,但我得到一个错误可能是因为 json 有一些嵌套值。错误:ValueError: Extra data: line 2 column 1 - line 1569265 column 1 (char 763 - 1426365176) @mnmbs 看看这个 *** 答案;它可能会有所帮助:Python json.loads shows ValueError: Extra data 文件必须以二进制模式读取 (with open('sample.json', 'rb') as fh)。简单的 'r' 可能会产生 UnicodeDecodeError。 (这在我身上发生了很多次。)

以上是关于Json 文件到字典的主要内容,如果未能解决你的问题,请参考以下文章

Python:字典到 Json 文件

使用空字典作为值将 JSON 文件加载到 BigQuery

在python中将json文件提取到字典中

python:用json把字典序列化到文件中

python 如何将字典对象保存到json文件的示例

如何将字典附加到熊猫数据框?