安全的JSON导航

时间:2018-10-08 21:27:33

标签: c# .net json.net

是否可以安全地浏览JSON?

给出此JSON,

{
  "foo": { 
    "bar": { 
      "baz": "quz"
    }
  }   
}

我想像下面一行一样安全地浏览它,而不必为它们全部创建类型。

string value1 = jObj.foo?.bar?.baz ?? "default";
// value1 == "quz"

string value2 = jObj.foo?.abc?.def ?? "default";
// value2 == "default"

我也许可以使用此签名来编写扩展方法,但是请告诉我是否有一种更简便的安全导航方法。

string value = jObj.Value(
  "foo.bar?.baz?[1].qux",
  "default"
);

1 个答案:

答案 0 :(得分:1)

对于您提到的确切语法,可以将JObject强制转换为动态。

var jObj = JsonConvert.DeserializeObject<dynamic>(text);
string value1 = jObj.foo?.bar?.baz ?? "default";

此处a LINQPad sample显示您的示例按预期工作。

如果您不想使用dynamic(我不会怪您),则可以这样使用SelectToken:

var jObj = JsonConvert.DeserializeObject<JObject>(text);
string value1 = (string)jObj.SelectToken("foo.bar.baz") ?? "default";

http://share.linqpad.net/h4bnui.linq