阅读原文: 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提取