Python3之jsonpath使用和json转换

jsonpath使用和json转换

(一)JSONPath-JSON的XPath

  • JSONPath表达式始终以与XPath表达式与XML文档结合使用的相同方式引用JSON结构。由于JSON结构通常是匿名的,并且不一定具有“根成员对象”,因此JSONPath假定$分配给外部对象的抽象名称。[摘自官方文档]
  • JSONPath表达式可以使用点号-表示法:$.store.book[0].title
  • 括号符号:$[‘store‘][‘book‘][0][‘title‘]
  • JSONPath允许通配符 *表示成员名称和数组索引

部分语法(够用)

jsonpath 描述
$ 根元素
@ 当前对象元素
. 子元素
.. 递归下降(所有元素)
* 通配符

安装jsonpath库

pip install jsonpath

准备json数据

json_data = {
    "code": 0,
    "message": "0",
    "ttl": 1,
    "data": {
        "isLogin": True,
        "email_verified": 0,
        "face": "http://i1.hdslb.com/bfs/face/17061e541785832b44426c51429ddfee39.jpg",
        "level_info": {
            "current_level": 0,
            "current_min": 0,
            "current_exp": 0,
            "next_exp": 1
        },
        "mid": 377206,
        "mobile_verified": 1,
        "money": 0,
        "moral": 70,
        "official": {
            "role": 0,
            "title": "",
            "desc": "",
            "type": -1
        },
        "officialVerify": {
            "type": -1,
            "desc": ""
        },
        "pendant": {
            "pid": 0,
            "name": "",
            "image": "",
            "expire": 0
        },
        "scores": 0,
        "uname": "洒脱喽",
        "vipDueDate": 0,
        "vipStatus": 0,
        "vipType": 0,
        "vip_pay_type": 0,
        "vip_theme_type": 0,
        "wallet": {
            "mid": 377206,
            "bcoin_balance": 0,
            "coupon_balance": 0,
            "coupon_due_time": 0
        },
        "has_shop": False,
        "shop_url": "",
        "allowance_count": 0,
        "answer_status": 1
    }
}

导包

import jsonpath

使用

1、获取data节点下的所有数据
普通取值方式
datas = json_data["data"]
for data in datas.items():
    print(data)
使用jsonpath取值
# 返回的是一个数组
datas = jsonpath.jsonpath(json_data, "$.data")
for data in datas[0].items():
    print(data)

2、获取json数据中的uname
# 普通取值需要先看json数据,找到uname节点,如果没有就会报错
data1 = json_data["data"]["uname"]
print(data1)
# jsonpath取值不需要看json数据,直接通过..(..就表示全局检索后面跟的属性)全局搜索uname属性,如果没有返回FALSE
data2 = jsonpath.jsonpath(json_data, "$..uname")
print(data2)

3、获取json数据中所有的mid(使用普通的取值只能一个一个获取)
datas = jsonpath.jsonpath(json_data, "$..mid")


(二)json转换

  • **不能使用dict将json字符串转换为字典
  • **不能使用eval将json字符串转换为字典,json中的null在python中无法识别,会当成变量处理
  • loads():将json字符串转换为python类型的,或自动将null转换为None
  • dumps():将python类型的数据转换为json字符串,会自动将None转换为null

json库是Python3自带的库,直接导入使用

import json

准备一个字典和一个json字符串

data = {"name": "ming", "id": 18, "msg": None}
json_data = '{"name":"Tom","id":19,"msg":null}'

使用loads()将json字符串转换为python类型的,或自动将null转换为None

res = json.loads(json_data)
print(res, type(res))

使用dumps()将python类型的数据转换为json字符串,会自动将None转换为null

res = json.dumps(data)
print(res, type(res))

【完】

原文地址:https://www.cnblogs.com/desireyang/p/12106118.html

时间: 2024-08-29 14:13:27

Python3之jsonpath使用和json转换的相关文章

atitit.XML类库选型及object 对象bean 跟json转换方案

atitit.XML类库选型及object 对象bean 跟json转换方案 1. XML类库可以分成2大类.标准的.这些类库通常接口和实现都是分开的 1 2. 常见的xml方面的方法 2 2.1. xml解析 2 2.2. bean与xml互相转换 2 2.3. json与xml的互相转换 2 3. 大名鼎鼎的 DOM  绿色环保的 SAX 默默无闻的 Digester 2 3.1. 默默无闻的 Digester:XML 的 JavaBean 化 2 4. Digester 解析 XML 3

比Newtonsoft.Json轻量快速简洁的实体JSON转换库YeaJur.Mapper

在使用MVC的时候,我们经常用到Newtonsoft.Json来进行实体和JSON 之间的转换,但是有时候,有些实体Newtonsoft.Json转换会出现异常.YeaJur.Mapper正是为了解决这些问题而来,并比Newtonsoft.Json轻量,转换速度快,使用简洁,测试结果如下 PK项 YeaJur.Mapper Newtonsoft.Json 版本 1.0 9.0.1 大小 6KB 514KB 实例(json格式) [ { "Products": [ { "Id&

JSON转换

JSON简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它易于编程人员阅读和编写,同时也易于机器解析和生成.它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition – December 1999的一个子集.JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)

XML,Object,Json转换之浅析Xstream的使用

XML,Object,Json转换之浅析Xstream的使用 请尊重他人的劳动成果,转载请注明出处:XML,Object,Json转换之浅析Xstream的使用 XStream的是一个简单的库,主要用于Java对象和XML之间的转换.但XStream也内置了对Json的支持. 1.Xstream的特点: 这里直接引用Xstream官方的叙述: 灵活易用:在更高的层次上提供了简单.灵活.易用的统一接口,用户无需了解项目的底层细节 无需映射:大多数对象都可以在无需映射的情况下进行序列化与反序列化的操

Newtonsoft.Json 转换DateTime类型为字符串时,串内部会有一个T。解决方案

使用Newtonsoft.Json 转换DateTime类型时,若使用标准转换,则字符串内会有一个T(虽然再转换成DateTime没有问题). 若要转换成DateTime没有T,可以加上特性: 1 public class TestClass 2 { 3 public TestClass() 4 { 5 Dt1 = Dt2 = new DateTime(1900, 1, 1, 0, 0, 0); 6 } 7 8 [JsonConverter(typeof(TcDateTimeConverter)

JSONPath - XPath for JSON

http://goessner.net/articles/JsonPath/ [edit] [comment] [remove] |2007-02-21| e1 # JSONPath - XPath for JSON A frequently emphasized advantage of XML is the availability of plenty tools to analyse, transform and selectively extract data out of XML do

miniui datagrid 保存到服务端,使用.NET 自带 JSON 转换时发现日期格式不兼容。

使用 miniui datagrid 修改表格后,保存到服务端,然后使用 .NET 自带 JSON 转换,会抛出DateTime 内容“2015-12-27T11:02:28”未按 JSON 的要求以“\/Date(”开始并以“)\/”结束.异常,以下是解决方案: function saveData() { //前面代码略 var data = grid.getChanges(); var jsonArray = mini.decode(data);//转成json for (var i = 0

C# JSON转换以及编码转换

C# JSON转换以及编码转换 一.C# Json转换 首先需要下载安装Newtonsoft.Json.dll,下载地址 引用后再添加:using Newtonsoft.Json;using Newtonsoft.Json.Converters;即可使用. String转JSON String json=JsonConvert.SerializeObject(str); JSON转String String str=JsonConvert.DeserializeObject<String>(j

c#里string和Json转换

这里要用到如下两个namespace: using System.Runtime.Serialization.Json;using System.Runtime.Serialization; 定义Json实体类如下: [DataContract] public class TextMessage { [DataMember(Name = "content")] public string Content { get; set; } } [DataContract] public cla