【问题标题】:Safe JSON navigation安全的 JSON 导航
【发布时间】:2018-10-10 23:03:50
【问题描述】:

有没有办法安全地导航 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"
);

【问题讨论】:

标签: c# .net json.net


【解决方案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

【讨论】:

    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2016-04-08
    • 2017-12-22
    • 2011-05-05
    相关资源
    最近更新 更多