【问题标题】:How to parse data in JSON format?如何解析 JSON 格式的数据?
【发布时间】:2011-12-07 22:22:44
【问题描述】:

我的项目目前正在 python 中接收一条 JSON 消息,我需要从中获取一些信息。为此,让我们将其设置为字符串中的一些简单 JSON:

jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}'

到目前为止,我一直在使用列表生成 JSON 请求,然后使用 json.dumps,但要执行与此相反的操作,我认为我需要使用 json.loads。但是我没有太多运气。谁能给我一个 sn-p,它会在上面的例子中返回 "2""two" 的输入?

【问题讨论】:

  • 注意:对于那些使用' 单引号字符串分隔符的数据,您可能不小心为 Python 字典创建了字符串表示。 JSON 将始终使用" 分隔符。如果是这样,请修复生成该输出的代码以使用 json.dumps() 而不是 str()repr(),然后转到 Convert a String representation of a Dictionary to a dictionary? 以了解如何恢复 Python 数据。您有 Python 文字的其他线索?查找NoneTrueFalse,JSON 将使用nulltruefalse
  • 那些没有 jsonStr 但有字典列表(可能带有'单引号字符串分隔符)的人,也可以看看这里:stackoverflow.com/questions/41168558/…

标签: python json parsing


【解决方案1】:

很简单:

import json
data = json.loads('{"one" : "1", "two" : "2", "three" : "3"}')
print data['two']  # Or `print(data['two'])` in Python 3

【讨论】:

  • 另外,如果您需要更好的性能,请查看simplejson。较新的版本提供了优化,大大提高了读写能力。
  • 我实际上已经在使用 simplejson:import simplejson as json。忘了提,但谢谢:)
  • 知道了。使用.load 方法而不是.loads
【解决方案2】:

有时您的 json 不是字符串。例如,如果您从这样的 url 获取 json:

j = urllib2.urlopen('http://site.com/data.json')

您将需要使用 json.load,而不是 json.loads:

j_obj = json.load(j)

(很容易忘记:'s'代表'string')

【讨论】:

  • 只是补充一点,您可以通过调用 j.read() 来获取字符串内容,然后使用loads方法。在这种情况下,load() 方法负责调用 .read()
【解决方案3】:

对于 URL 或文件,请使用 json.load()。对于带有 .json 内容的字符串,请使用 json.loads()

#! /usr/bin/python

import json
# from pprint import pprint

json_file = 'my_cube.json'
cube = '1'

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

# pprint(data)

print "Dimension: ", data['cubes'][cube]['dim']
print "Measures:  ", data['cubes'][cube]['meas']

【讨论】:

    【解决方案4】:

    以下是可能对您有所帮助的简单示例:

    json_string = """
    {
        "pk": 1, 
        "fa": "cc.ee", 
        "fb": {
            "fc": "", 
            "fd_id": "12345"
        }
    }"""
    
    import json
    data = json.loads(json_string)
    if data["fa"] == "cc.ee":
        data["fb"]["new_key"] = "cc.ee was present!"
    
    print json.dumps(data)
    

    上述代码的输出将是:

    {"pk": 1, "fb": {"new_key": "cc.ee was present!", "fd_id": "12345", 
     "fc": ""}, "fa": "cc.ee"}
    

    请注意,您可以设置 dump 的 ident 参数来打印它(例如,使用 print json.dumps(data , indent=4) 时):

    {
        "pk": 1, 
        "fb": {
            "new_key": "cc.ee was present!", 
            "fd_id": "12345", 
            "fc": ""
        }, 
        "fa": "cc.ee"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      相关资源
      最近更新 更多