如何解析 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 文字的其他线索?查找NoneTrueFalse,JSON 将使用nulltruefalse 那些没有 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 格式的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何生成和解析json格式数据

iOS开发之JSON格式数据的生成与解析

如何在全日历中解析 json 格式的事件?

如何格式化通过 AJAX 从 ASPX JSON 解析的日期?

如何高效快速地解析大量行格式json文件

将Array格式的数据解析成JSON格式的数据