【问题标题】:Convert multiline JSON to python dictionary将多行 JSON 转换为 python 字典
【发布时间】:2013-08-25 15:24:50
【问题描述】:

我目前在一个包含多个 JSON 行的文件中保存了这些数据(大约 13k 行,但下面的示例被缩短了:

{"first_name":"John","last_name":"Smith","age":30}
{"first_name":"Tim","last_name":"Johnson","age":34}

我有以下代码:

import json
import codecs

with open('brief.csv') as f:
    for line in f:
        tweet = codecs.open('brief.csv', encoding='utf8').read()
        data = json.loads(tweet)
print data
print data.keys()
print data.values()

如果我的文件中只有一行数据,这很好用。但是,我似乎无法弄清楚如何逐行将每一行更改为字典。当我尝试在多行上运行它时,我收到 ValueError(errmsg("Extra data", s end, len(s))) 错误,因为代码只想处理两个大括号,即第一行。我最终希望能够选择某些键(例如 first_name 和 age),然后仅从我的文件中打印出这些值。

知道如何做到这一点吗?

【问题讨论】:

    标签: python json dictionary


    【解决方案1】:

    您正在为每一行读取整个文件一次...尝试这样的操作:

    import json
    import codecs
    
    tweets = []
    
    with codecs.open('brief.csv', encoding='utf8') as f:
        for line in f.readlines():
            tweets.append(json.loads(line))
    
    print tweets
    
    for tweet in tweets:
        print tweet.keys()
        print tweet['last_name']
    

    【讨论】:

    • (编辑只是为了让最初的部分一直在做什么更明显,fwiw -- 很高兴你现在得到了你需要的东西:))
    • 是的,我现在明白了。谢谢你让我更清楚:)
    【解决方案2】:

    也许你可以尝试像下面这样更简化

    >>> import simplejson as json 
    >>> with open("brief.csv") as f:
    ...     for line in f:
    ...         data = json.loads(line)
    ...         print data
    ...         print data.values()
    ...         print data.keys()
    
    {'first_name': 'John', 'last_name': 'Smith', 'age': 30}
    ['John', 'Smith', 30]
    ['first_name', 'last_name', 'age']
    {'first_name': 'Tim', 'last_name': 'Johnson', 'age': 34}
    ['Tim', 'Johnson', 34]
    ['first_name', 'last_name', 'age']
    

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 1970-01-01
      • 2014-02-26
      • 2018-05-04
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多