JSON处理

Ceastld 2020/10/23 发布 · 2022/1/1 更新 · 1275 次阅读

阅读原文: Json处理——JToken的使用 

如果不了解表达式的使用,以及如何测试表达式,请移步: 表达式的使用

Json是什么:JSON 语法 | 菜鸟教程

表达式中处理Json,用到的是Newtonsoft.Json库:Introduction

解析Json文本

一般来说,要解析的Json是对象或者数组两种形式,在无法确定是什么形式的时候,用JToken中的方法进行解析

$=JToken.Parse({text}) //text 是你要解析的文本变量
  • 明确是对象形式{ }:当成词典来用(JObject)
$=var str = "{'a':'1','b':'2'}";
var jobj = JObject.Parse(str);
return jobj.ContainsKey("a");
结果:True
  • 明确是数组形式 [ ]:当成列表来用(JArray)
$=var str = "[1,2,3,4,5]";
var jobj = JArray.Parse(str);
return jobj.Count;
  • Json取值,在JToken对象后面,用 ["key"] 的形式进行取值
    • 可以是多层,["key1"]["key2"]...["keyn"]
$=JToken.Parse(@'{"a": 1,"b": {"a": 2,"b": 3}}')["b"]["a"];

结果:2

提取指定路径Json

参考:Querying JSON with SelectToken

Json路径是什么:JsonPath 语法手册

Json提取动作推荐:Json提取

  • 提取第一个SelectToken
$=var token = JToken.Parse(@'{"a": 1,"b": 2,"c": {"a": 2,"b": 3}}');
token.SelectToken("a");
  • 提取作为列表SelectTokens
$=var token = JToken.Parse(@'{"a": 1,"b": 2,"c": {"a": 2,"b": 3}}');
token.SelectTokens("$..a");
结果:[1,2]

修改指定路径Json

  • 确定的路径,可以直接写在代码中
$=var token = JToken.Parse(@'{"a": 1,"b": 2,"c": {"a": 2,"b": 3}}');
token["c"]["a"] = "1234";
return token;

结果:

{
  "a": 1,
  "b": 2,
  "c": {
    "a": "1234",
    "b": 3
  }
}
  • 路径可能是变量,需要先提取,然后再修改
$=var token = JToken.Parse(@'{"a": 1,"b": 2,"c": {"a": 2,"b": 3}}');
var select = token.SelectToken("c.a");
select.Replace((JToken)"124");
return token;

结果:

{
  "a": 1,
  "b": 2,
  "c": {
    "a": "124",
    "b": 3
  }
}

删除指定路径Json

  • 删除时,一个节点,其父节点可能是JArray或者JObject,需要分类处理
$=var token = JToken.Parse(@'{"a": 1,"b": 2,"c": {"a": 2,"b": 3}}');
var select = token.SelectToken("c.a");
if(select.Parent is JArray){
  select.Remove();
}
else{
  select.Parent.Remove();
}
return token;
结果:
{
  "a": 1,
  "b": 2,
  "c": {
    "b": 3
  }
}

示例动作:JSON解析

Json提取动作推荐:Json提取

· {{comment.createTimeStr}}
{{reply.votePoints}}
回复   – {{reply.createTimeStr}}
回复 x
标签
目录
相关操作