如何解析 JSON 格式的数据?
Posted
技术标签:
【中文标题】如何解析 JSON 格式的数据?【英文标题】:How to parse data in JSON format? 【发布时间】: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 文字的其他线索?查找None
、True
或False
,JSON 将使用null
、true
和false
。
那些没有 jsonStr 但有字典列表(可能带有'
单引号字符串分隔符)的人,也可以看看这里:***.com/questions/41168558/…
【参考方案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"
【讨论】:
以上是关于如何解析 JSON 格式的数据?的主要内容,如果未能解决你的问题,请参考以下文章