• jsonpath源码分析


    今天有时间把jayway.jsonpath源码看了一遍,记录下来。

    jsonpath 使用非常简单, 常用的 JsonPath.parse(str),   root.read('/root/').  首先它把文档字符串转成JsonObject,  在查找时,先把查找字符串转成PathToken对象,然后再查找。

    我们分析一下这两个函数的源码。

    1。 JsonPath.parse 源码很简单,  把json 串用三方的json包解析成jsonObject,   

      

    然后封装成JsonContext , JsonContext 是DocumentContext的一个实现.  parse函数返回 DocumentContext.

     2.   root.read('')  ,首先是解析路径字符串,用'.' 分割成PathToken (PathToken 是链表, 用next 指向下一节点) 

      PathToken 下的子类来实现各种的路径(RootPathToken 代表jsonpath 根类)

     解析的时候,用几个辅助类, PathCompiler, CharacterIndex(字符串逐字母读取)

    PathCompiler: 字符串解析类

    readNextToken()  读取下一个

      PERIOD 就是 '.' , 分割字符串.

    解析完 在CompiledPath 类 root变量存储 PathToken 

    JsonPath.read():

      CompiledPath:

     evaluate 来计算json 路径的值

    EvaluationContextImpl 中  root 就是PathToken, rootDocument 是上面分析的jsonObject.

     如果是叶子结点,就添加到model 到 EvaluationContextImpl 中(model 就是最后取的值),如果不是,就next 取下一个PathToken, 解析.

  • 相关阅读:
    委托系列整理
    EF Lambda 多表查询
    枚举,Enum,常规使用demo记录
    自定义Window 服务
    xpath 操作XML
    MVC 自定义过滤器
    时间比对,常用细节记录
    Lock锁_线程_线程域
    break、continue和goto 三者作用介绍
    .net 学习路线感想
  • 原文地址:https://www.cnblogs.com/songsh/p/12593796.html
Copyright © 2020-2023  润新知