【问题标题】:Build JObject from JSONPath从 JSONPath 构建 JObject
【发布时间】:2017-05-16 10:45:38
【问题描述】:

我对使用用于 .NET 的 Newtonsoft JSON 库有点陌生。有什么方法可以从 JSONPath 创建 JObject 或 JToken?

例如,如下所示。

string jsonPath = "$.ArrayA[0].ArrayB[0].Property";
JObject jObj = JObject.FromJSONPath(jsonPath); // SOMETHING LIKE THIS

结果将是如下所示的 JObject 或 JToken。

{
    "ArrayA": [{
        "ArrayB": [{
            "Property": ""
        }]
    }
}

【问题讨论】:

    标签: c# json.net


    【解决方案1】:

    没有。

    如果您有一些现有的 JSON,您可以将其解析为 JToken,然后使用 SelectTokenSelectTokensJsonPath expression 从中选择一个或多个后代 JToken。例如:

    string json = @"{ ""ArrayA"": [{ ""ArrayB"": [{ ""Property"": ""foo"" }] }] }";
    JToken token = JToken.Parse(json);
    JToken fooToken = token.SelectToken("$..Property");
    Console.WriteLine(fooToken.ToString());    // prints "foo"
    

    您还可以手动构建 JTokens 的嵌套结构。例如,您可以像这样在问题中创建 JObject:

    var obj = new JObject(new JProperty("ArrayA", new JArray(
                 new JObject(new JProperty("ArrayB", new JArray(
                    new JObject(new JProperty("Property", ""))))))));
    

    但是,除了 JsonPath 表达式之外,没有任何内置方法可以创建 JToken。你需要推出自己的方法来做类似的事情。但请记住,JsonPath 被设计为一种查询机制;它没有清晰地映射到新对象的创建。以下是您需要考虑的一些问题:

    • 在您的示例表达式$.ArrayA[0].ArrayB[0].Property 中,Property 是什么类型?它是字符串、数字、布尔值、对象还是空数组?你会如何指定?
    • 如何指定创建具有多个属性的对象?
    • $..book[(@.length-1)] 这样的表达式会创建什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多