标签: jsonpath

如何从 Java 中的 Unirest 响应获取原始 JSON 文本

我正在尝试向服务器发送 POST 请求,获取响应并解析它(它是一个 JSON 文件)。

我使用 Unirest 来处理我的 POST 请求,如下所示:

        HttpResponse<JsonNode> response = Unirest
                .post("http://myserver.com/file")
                  .header("cache-control", "no-cache")
                  .header("Postman-Token", "02ec2fa1-afdf-4a2a-a535-353424d99400")
                .header("Content-Type", "application/json")
                .body("{some JSON body}")
                .asJson();

        // retrieve the parsed JSONObject from the response
        JSONObject myObj = response.getBody().getObject();
        // extract fields from the object
        String msg = myObj.toString();

        System.out.println(msg);
Run Code Online (Sandbox Code Playgroud)

但我在获取原始 JSON 文本时遇到问题(我想用它JSONPath来解析响应)。

我怎样才能做到这一点?toString()到目前为止,我所有调用方法的尝试都失败了。

java json jsonpath unirest jsonparser

4
推荐指数
1
解决办法
8291
查看次数

如何通过 Jayway JsonPath 展平带有嵌套列表的 json?

目前我需要根据配置处理一些 json 结果,而不是硬代码。

例如,json如下

{
    data: [{
        orderNo: "CG8310150",
        details: [{
            skuId: 4384,
            amount: 2
        }, {
            skuId: 4632,
            amount: 5
        }]
    }, {
        orderNo: "CG8310151",
        details: [{
            skuId: 4384,
            amount: 3
        }]
    }]
}
Run Code Online (Sandbox Code Playgroud)

我想要的结果如下

[{
    orderNo: "CG8310150",
    skuId: 4384,
    amount: 2
}, {
    orderNo: "CG8310150",
    skuId: 4632,
    amount: 5
}, {
    orderNo: "CG8310151",
    skuId: 4384,
    amount: 3
}]
Run Code Online (Sandbox Code Playgroud)

如果有人有 Jayway JsonPath 的解决方案,或者有任何其他工具的建议,请告诉我。

感谢您的帮助!

java json jsonpath jayway

4
推荐指数
1
解决办法
4242
查看次数

jsonPath - 如何通过匹配子字符串来过滤结果

我有这样的结构:

{"payload": {

    "Item1": {
      "property1": "Sunday",
      "property2": "suffering_8890"
    },

    "Item2": {
      "property1": "Monday",
      "property2": "misery_0776"
    },

    "Item3": {
      "property1": "Tuesday",
      "property2": "pain_6756"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要包含某个子字符串(即“misery”)的 property2 值。最终我只需要 4 位代码,但即使获得完整的值也可以。我可以使用以下方法获取所有 property2 值的列表:

$..property2
Run Code Online (Sandbox Code Playgroud)

这将返回:

Result[0] = suffering_8890
Result[1] = misery_0776
Result[2] = pain_6756
Run Code Online (Sandbox Code Playgroud)

如何过滤它,以便它只给出包含子字符串“misery”的结果?

json jmeter jsonpath

4
推荐指数
1
解决办法
1万
查看次数

如何使用 kubectl 命令从 k8s configmap 内的 yaml 文件获取值?

假设 configmap 列出如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
  namespace: ${namespace}
data:
  my-config.yaml: |-
    keyA:
      keyB: a-value
Run Code Online (Sandbox Code Playgroud)

如何使用命令从 configmap获取keyB(即) 的值?a-valuekubectl

PS:我正在考虑使用-o jsonpathor-o 'go-template=...选项,但我无法找出正确的语法。

jsonpath go-templates jq kubernetes

4
推荐指数
1
解决办法
1万
查看次数

从 LogicApp 中的 json 获取值

完全改写问题,因为第一次尝试尚不清楚。

在我的逻辑应用程序中,我正在从 blob 读取 .json,其中包含:

{
    "alpha": {
        "url": "https://linktoalpha.com",
        "meta": "This logic app does job aaaa"
    },
    "beta": {
        "url": "https://linktobeta.com",
        "meta": "This logic app does job beta"
    },
    "theta": {
        "url": "https://linktotheta.com",
        "meta": "This logic app does job theta"
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用正文中包含的 http 帖子触发逻辑应用程序:

{ "logicappname": "beta" }
Run Code Online (Sandbox Code Playgroud)

但“logicappname”的值可以是 alpha、beta 或 theta。我现在需要设置一个包含“beta”的 url 值的变量。如果没有 jsonpath 支持,如何实现这一点?

我已经使用 json 解析 blob 中的文件内容,这给了我令牌...但我不知道如何选择我需要的值。希望有任何帮助,谢谢。

azure jsonpath azure-logic-apps

4
推荐指数
1
解决办法
2万
查看次数

如何使用 jsonpath-ng 算术?

jsonpath-ng包声称支持基本算术(https://pypi.org/project/jsonpath-ng/),但解析器不会接受算术语句。这是其中之一:

from jsonpath_ng import parse

jsonpath_expr = parse('$.objects[*].cow + $.objects[*].cat')
obj = {'objects': [
  {'cow': 2, 'cat': 3},
  {'cow': 4, 'cat': 6}
]}
values = [match.value for match in jsonpath_expr.find(obj)]  
print(values)
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    jsonpath_expr = parse('$.objects[*].cow + $.objects[*].cat')
  File "C:\Users\micha\AppData\Roaming\Python\Python38\site-packages\jsonpath_ng\parser.py", line 14, in parse
    return JsonPathParser().parse(string)
  File "C:\Users\micha\AppData\Roaming\Python\Python38\site-packages\jsonpath_ng\parser.py", line 32, in parse
    return self.parse_token_stream(lexer.tokenize(string))
  File "C:\Users\micha\AppData\Roaming\Python\Python38\site-packages\jsonpath_ng\parser.py", line 55, in parse_token_stream
    return new_parser.parse(lexer = IteratorToTokenStream(token_iterator))
  File "C:\Users\micha\AppData\Roaming\Python\Python38\site-packages\ply\yacc.py", line …
Run Code Online (Sandbox Code Playgroud)

python jsonpath jsonpath-ng

4
推荐指数
1
解决办法
671
查看次数

获取python中的json路径列表

我正在寻找 json 文件中所有可能的 json 路径的列表 - 可以推荐任何一个吗?

例如:如果输入低于

{
   "_id":{
      "$oid":""
   },
   "aa":false,
   "bb":false,
   "source":"",
   "email":"",
   "createdAt":{
      "$date":""
   },
   "updatedAt":{
      "$date":""
   },
   "cc":"",
   "vv":"",
   "metadata":{
      "vv":"",
      "xx":[{}]
   }
}
Run Code Online (Sandbox Code Playgroud)

输出:

obj
obj._id
obj._id.$oid
obj.aa
obj.bb
obj.source
obj.email
obj.createdAt
obj.createdAt.$date
obj.updatedAt
obj.updatedAt.$date
obj.cc
obj.vv
obj.metadata
obj.metadata.vv
obj.metadata.xx
obj.metadata.xx[0]
Run Code Online (Sandbox Code Playgroud)

我基本都是在找 python 版本: https: //www.convertjson.com/json-path-list.htm

我想构建一个通用解决方案,如果有任何 json 文件 - 它将是模式生成的单个值(即换行符分隔的 json 中的一行)有什么建议吗?

python json jsonpath json-query

4
推荐指数
1
解决办法
3115
查看次数

使用jsonPath检查Map键/值

我正在测试一个返回Map的控制器

@RequestMapping("/")
@ResponseBody
public Map<String, String> getMessages(@RequestBody String foo) {
    Map<String, String> map = boo.getMap(foo);
    return map;
}
Run Code Online (Sandbox Code Playgroud)

测试:

...
resultActions
        .andDo(print())
        .andExpect(status().isOk())
        .andExpect(
                content().contentTypeCompatibleWith(
                        MediaType.APPLICATION_JSON))
        .andExpect(jsonPath("$", notNullValue()))
        .andExpect(jsonPath(EXPRESSION, equalsTo(foo));
 ...
Run Code Online (Sandbox Code Playgroud)

我应该使用哪个表达式来读取Map中的键和值?

编辑:解决问题的方法可能是:

MvcResult result = resultActions.andReturn();
MockHttpServletResponse response = result.getResponse();
String content = response.getContentAsString();
Gson gson = new Gson();
Type typeOfT = new TypeToken<Map>() {
}.getType();
Map<String, String> map = gson.fromJson(content, typeOfT);
Run Code Online (Sandbox Code Playgroud)

然后遍历地图检查值.但有没有办法做到这一点jsonPath

java jsonpath mockmvc

3
推荐指数
1
解决办法
8010
查看次数

如何从JSON字符串获取值的所有JSON路径列表?

我的目标是读取一个JSON文件并理解所有值的位置,这样当我遇到相同的JSON时,我可以轻松读取所有值.我正在寻找一种方法来返回一个列表,其中包含Jayway JsonPath格式的每个数据值的所有路径.

示例JSON:

{
  "shopper": {
    "Id": "4973860941232342",
    "Context": {
      "CollapseOrderItems": false,
      "IsTest": false
    }
  },
  "SelfIdentifiersData": {
    "SelfIdentifierData": [
      {
        "SelfIdentifierType": {
          "SelfIdentifierType": "111"
        }
      },
      {
        "SelfIdentifierType": {
          "SelfIdentifierType": "2222"
        }
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想将JSON作为String,并执行以下操作:

String json = "{'shopper': {'Id': '4973860941232342', 'Context': {'CollapseOrderItems': false, 'IsTest': false } }, 'SelfIdentifiersData': {'SelfIdentifierData': [{'SelfIdentifierType': {'SelfIdentifierType': '111'} }, {'SelfIdentifierType': {'SelfIdentifierType': '2222'} } ] } }";

Configuration conf = Configuration.defaultConfiguration();
List<String> jsonPaths = JsonPath.using(conf).parse(json).read("$");

for (String path : jsonPaths) { …
Run Code Online (Sandbox Code Playgroud)

java json hashmap jsonpath

3
推荐指数
2
解决办法
1万
查看次数

JsonPath:如何通过JsonPath检查字段是否有某些值?

我发现有点难以理解如何编写一个jsonpath来告诉我字段中是否存在某些值.

例如:考虑一下这个json:

{
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  },
  "phoneNumbers": [
    {
      "type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

如果我写:$ .phoneNumbers [?(@.type.length> 0)]

它给了我这个结果:

'0' ...
  'type' => "iPhone"
  'number' => "0123-4567-8888"
'1' ...
  'type' => "home"
  'number' => "0123-4567-8910"
Run Code Online (Sandbox Code Playgroud)

我这样做了:http://jsonpath.com/

因此,如果我想知道在phonenumber中的数字字段中是否有任何值,或者它是否为空,那么我的jsonpath应该是什么?我尝试了各种各样的东西,但无法理解.

谢谢!

json jsonpath

3
推荐指数
1
解决办法
9347
查看次数