当前位置: 首页 > 知识库问答 >
问题:

嵌套JSON对象的Jsonpath

丁曦
2023-03-14

我有一个带有嵌套字段的JSON:

  [
    {
    "Platform Parent Dato Id": "23768",
    "Platform Dato Id": "24138",
    "Platform Dato Name": "Random Europe",
    "Platform mission Id": "111112",
    "Platform submission Id": "638687",
    "Platform submission Flight Id": "863524",
    "Start Date": "2017-12-01",
    "End Date": "2017-12-02",
    "Platform Compensation": 109.0909,
    "Total Value": 909.0909,
    "Goal": "200000.0000",
    "Value Information": {
      "Platform Compensation": [
        {
          "Platform mission Id": "111112",
          "Platform submission Id": "638687",
          "Platform submission Flight Id": "863524",
          "Value Rate": "14.0000",
          "Value": 109.0909
        }
      ]
    }
  },
  {
    "Platform Parent Dato Id": "23768",
    "Platform Dato Id": "24138",
    "Platform Dato Name": "Random Europe",
    "Platform mission Id": "111113",
    "Platform submission Id": "638687",
    "Platform submission Flight Id": "863524",
    "Start Date": "2017-12-01",
    "End Date": "2017-12-02",
    "Platform Compensation": 109.0909,
    "Total Value": 909.0909,
    "Goal": "200000.0000",
    "Value Information": {
      "Platform Compensation": [
        {
          "Platform mission Id": "111113",
          "Platform submission Id": "638687",
          "Platform submission Flight Id": "863524",
          "Value Rate": "12.0000",
          "Value": 109.0909
        }
      ]
    }
  }
  ]

我正在使用JSONPATH从Value Information嵌套中获取Value rate

我已经将我的JSON文本粘贴到了http://jsonpath.com/这个网站上;并且在使用了这一行之后:

$[*].['Platform Compensation'].['Value Rate']

我得到了这个:

使用此行后:

$.['Value Information'].['Platform Compensation'].['Platform mission Id']

我得到了这个:

我尝试返回(输出)的内容如下:

但是我找不到合适的语法来将这两个组合在一行中,并用一个JSONPATH查询返回它们。

共有2个答案

苏乐
2023-03-14

Jayway实现允许您这样做。jsonpath应该是< code> $。[*]['价值信息']['平台补偿'][*]['平台任务Id ','价值率']

你可以在这个网站试试http://jsonpath.herokuapp.com/

林绪
2023-03-14

jsonpath可用于为给定表达式选择值,并且在某些实现中为自定义谓词选择值,但它不支持预测。

您可以使用 jsonpath 来筛选给定的 JSON。例如:

>

  • 返回一个包含所有平台补偿值的数组:

    $.['Value Information'].['Platform Compensation'].['Platform mission Id']
    

    返回一个包含所有平台任务 ID 值的数组:

    $.['Value Information'].['Platform Compensation']
    

    但是您不能使用jsonpath来读取键和值的子集。要读取键和值的子集,您需要使用JSON反序列化库。在Java世界中,常用的库是Jackson和Gson。

    下面是使用 Jackson 的示例:

    String json = "...";
    
    ObjectMapper mapper = new ObjectMapper();
    Map<String, Object> asMap = mapper.readValue(json, Map.class);
    
    Map<String, Object> transformed = new HashMap<>();
    transformed.put("Platform mission Id", asMap.get("Platform mission Id"));
    transformed.put("Value Rate", asMap.get("Value Rate"));
    
    String result = mapper.writeValueAsString(transformed);
    

  •  类似资料:
    • 问题内容: 有一个小问题上的话题,但他们都不来覆盖我的情况,因此我创建一个新的。 我有如下的JSON: 有没有办法解组嵌套的bar属性并将其直接分配给struct属性而不创建嵌套的struct? 我现在采用的解决方案如下: 这是简化版本,请忽略详细信息。如您所见,我希望能够解析并将其值分配给 我见过有人在使用地图,但这不是我的情况。除了一些特定的元素外,我基本上不关心(一个大对象)的内容。 在这种

    • 问题内容: 我目前有这个: test.json看起来像这样: 我越来越: 如何更改它,以便无论我拥有多少嵌套值,它都将循环遍历所有嵌套项目? 所以对于上面的例子,我会得到 问题答案: 您可以创建一个递归循环函数,但是会遇到一个问题:当属性是对象时,因为没有字符串,所以没有文本可显示。因此,您将得到: 因为while 是为项目#2显示的字符串,所以它是为项目#1显示的对象。 无论如何,这就是我组成的

    • 我有一个嵌套的JSON对象,如下所示: 我想将其转换为: 我如何使用JOLT实现这一点?感谢您的参与。

    • 我正在使用空手道JavaAPI处理Json对象。我将创建以下json: 当我尝试,我得到以下错误: json路径语法经过交叉检查是正确的,我可能缺少的任何其他点? 编辑:我正在使用v1。空手道核心1.0

    • 问题内容: 我必须遍历json数组对象。 它具有以下结构。 基本上我在做的是prod_1是产品的名称,并且prod_1的版本列表已填充在其中。 所以现在我想要的是产品的名称以及它的版本。 问题在于可能有很多产品和该产品下的许多版本。所以我需要可以在 javascript 中使用适当的循环结构来对其进行处理。 最好将循环将产品名称存储在一个变量中,将版本存储在另一个变量中,因为我需要对产品名称进行一

    • 问题内容: 我正在尝试解析JSON对象,其中的一部分看起来像这样: 等等.... 到目前为止,通过执行以下操作,我可以非常简单地解析: 但是,当我尝试将其用作“名称:”时,它将不起作用。 我试过了: 当我尝试这样做时,我得到“找不到JSONObject [业务]”。 当我尝试: 我得到了预期的“找不到JSONObject [名称]”。 我在这里做错了什么?我缺少一些基本的东西。 问题答案: 好吧,