JsonPath基本使用

概述

在.Net开发中,一般操作Json都是使用Newtonsoft.Json包,下面我们来使用该包以类似xpath的方式JsonPath操作Json。

介绍

JsonPath是xpath在json中的应用,是参照xpath表达式来解析xml文档的方式,用一个抽象的名字$来表示最外层的对象。常见的写法

$.store.book[0].title
$['store']['book'][0]['title']

在线测试网站:http://jsonpath.com/

JSONPath 允许使用通配符 * 表示所以的子元素名和数组索引。还允许使用 '..' (从E4X参照过来的和数组切分语法),示例

$.store.book[(@.length-1)].title

-- 使用'@'符号表示当前的对象,?(<判断表达式>) 使用逻辑表达式来过滤。
$.store.book[?(@.price < 10)].title

操作对比

XPathJSONPathDescription
/$表示根元素
.@当前元素
/. or []子元素
..n/a父元素
//..递归下降,JSONPath是从E4X借鉴的。
**通配符,表示所有的元素
@n/a属性访问字符
[][]子元素操作符
|[,]连接操作符在XPath 结果合并其它结点集合。JSONP允许name或者数组索引。
n/a[start:end:step]数组分割操作从ES4借鉴。
[]?()应用过滤表示式
n/a()脚本表达式,使用在脚本引擎下面。
()n/aXpath分组

示例

下面是一个简单的json数据结构代表一个书店

{
  "store": {
    "book": [
      {
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      {
        "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      {
        "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

操作示例

var str = File.ReadAllText("aa.txt");
JObject jobj = JObject.Parse(str);

var bb = jobj.SelectToken("$.data.emrMenuDisplayModels[2]['identify']");

//书点所有书的作者
var autherList = jobj.SelectTokens("$.store.book[*].author");

//所有的作者
var autherList2 = jobj.SelectTokens("$...author");

//store的所有元素。所有的bookst和bicycle
var store1 = jobj.SelectTokens("$.store.*");

//store里面所有东西的price
var store2 = jobj.SelectTokens("$.store..['price']");
var store3 = jobj.SelectTokens("$.store..price");

//第三个书
var book1 = jobj.SelectTokens("$.store.book[2]");
var book2 = jobj.SelectTokens("$..book[2]");

// 最后一本书
var book3 = jobj.SelectTokens("$..book[-1:]");
//var book3 = jobj.SelectTokens("$..book[(@.len-1)]");//不支持@.length
//var book4 = jobj.SelectTokens("$.store.book[(@.length-1)]");

//前面的两本书
var laing = jobj.SelectTokens("$..book[0,1]");

//过滤出所有的包含isbn的书
var contain = jobj.SelectTokens("$..book[?(@.isbn)]");

//过滤出价格低于10的书。
var price = jobj.SelectTokens("$..book[?(@.price<10)]");

//所有元素
var all = jobj.SelectTokens("$..*");

资料

参考资料:https://blog.csdn.net/myself8202/article/details/80724968

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值