zoukankan      html  css  js  c++  java
  • 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, 解析.

  • 相关阅读:
    Jenkins常用插件
    Jenkins安装配置简单使用
    Django简单快速实现PUT、DELETE方法
    Django admin有用的自定义功能
    ambari快速安装hadoop
    Asp.Net Core 3.0的依赖注入改变
    NCoreCoder.Aop 国庆更新
    NCoreCoder.Aop详解
    .Net Core 3.0下AOP试水~~
    .Net Core 3.0依赖注入替换 Autofac
  • 原文地址:https://www.cnblogs.com/songsh/p/12593796.html
Copyright © 2011-2022 走看看