# JSON处理 阅读原文: [Json处理——JToken的使用](https://www.wolai.com/xyqV7eg3NXqaFNj7tEb3Mk) 如果不了解表达式的使用,以及如何测试表达式,请移步: [表达式的使用](https://www.wolai.com/vVyENVTFFfmKpus6N5wndt) Json是什么:[JSON 语法 | 菜鸟教程](https://www.runoob.com/json/json-syntax.html) 表达式中处理Json,用到的是Newtonsoft.Json库:[Introduction](https://www.newtonsoft.com/json/help/html/Introduction.htm) ### 解析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](https://www.newtonsoft.com/json/help/html/SelectToken.htm#!) Json路径是什么:JsonPath 语法手册 Json提取动作推荐:[Json提取](https://getquicker.net/Sharedaction?code=e7a89c26-738d-4d01-c01e-08d9b9e3a249) - 提取第一个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解析](https://getquicker.net/sharedaction?code=00f5067b-71b0-4242-6267-08d87115a640) Json提取动作推荐:[Json提取](https://getquicker.net/Sharedaction?code=e7a89c26-738d-4d01-c01e-08d9b9e3a249)