标签: jsonpath

如何在Presto中的嵌套json数组对象中提取键?

我正在使用最新的(0.117)Presto并试图用这样复杂的JSON数组执行CROSS JOIN UNNEST.

[{"id": 1, "value":"xxx"}, {"id":2, "value":"yy"}, ...]
Run Code Online (Sandbox Code Playgroud)

为此,首先我尝试使用id by 的值创建一个ARRAY

SELECT CAST(JSON_EXTRACT('[{"id": 1, "value":"xxx"}, {"id":2, "value":"yy"}]', '$..id') AS ARRAY<BIGINT>)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

提取id值的最佳JSON路径是什么?

jsonpath presto

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

JsonPath 在 Spring Cloud Data Flow 过滤器组件中无法正常工作

我正在尝试编写一个简单的 SCDF 流,该流从 Kafka 读取,通过特定值的存在过滤消息并将数据推送到 Mongo。作为其中的一部分,我必须按照#jsonPath 编写

 #jsonPath(payload,'$[?(@.metadata!=null)].metadata[?(@.trigger-routing!=
 null)].trigger-routing') == {'1'}
Run Code Online (Sandbox Code Playgroud)

我编写了一个示例测试,它将运行 SPeL 并验证它返回的内容(注意:我有意使用 @EnableIntegration 来连接与 SCDF 相同的 SPeL 功能配置文件,至少这是我的理论)

@SpringBootTest(classes = SpelTst.TestConfiguration.class)
public class SpelTst {

    @Configuration
    @EnableIntegration
    public static class TestConfiguration {

    }

    @Autowired
    IntegrationEvaluationContextFactoryBean factory;

    @Test
    public void test() throws JsonProcessingException {
        final StandardEvaluationContext context = factory.getObject();
        ExpressionParser parser = new SpelExpressionParser();
        Expression exp = parser.parseExpression("#jsonPath(payload,'$[?(@.metadata!=null)].metadata[?(@.trigger-routing!= null)].trigger-routing') == {'1'}");

        final PixelHitMessage sampleOne = new PixelHitMessage()
                .setMetadata(ImmutableMap.of("trigger-routing", "1"))
                .toChildType();

        final PixelHitMessage sampleTwo = new PixelHitMessage()
                .setMetadata(ImmutableMap.of("trigger-routing", ""))
                .toChildType(); …
Run Code Online (Sandbox Code Playgroud)

java spring etl jsonpath spring-cloud-dataflow

13
推荐指数
1
解决办法
374
查看次数

使用Jayway的可选JsonPath

题:

我有一个服务,它接受一个JSON字符串作为输入.该JSON模式的每一个地方有些领域并不总是存在的时间是不同的.如何在使用Jayway JsonPath时查询这些字段的值?

我尝试过的:

我使用了Option.DEFAULT_PATH_LEAF_TO_NULLJayway的自述页面解释

Configuration config = Configuration.defaultConfiguration()
    .addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL);
if (JsonPath.isPathDefinite(attribute.jsonPath))
{
    String value = JsonPath.using(config).parse(currentTx).read(attribute.jsonPath);
    if (value != null)
    {
        attributeValues.add(value);
    }
}
else
{
    List<String> attributeValuesArray = JsonPath.using(config).parse(currentTx).read(attribute.jsonPath);

    for (String value : attributeValuesArray)
    {
        if (value != null)
        {
            attributeValues.add(value);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果找不到路径,这应该JsonPath.read()返回null,但是我的代码仍会抛出:

com.jayway.jsonpath.PathNotFoundException:路径$ ['somepath']中缺少属性

当我给它一条不存在的道路时.有谁知道这可能导致什么?

java json jsonpath

12
推荐指数
1
解决办法
6674
查看次数

JSONPath查询获取节点名称?

考虑以下JSONPath:

{
   "result":[
      {
         "type":"Residence",
         "street":"Piazza di Spagna",
         "city":"-4:0"
      },
      {
         "type":"Residence",
         "street":"test",
         "city":"-4:1"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

是否有可能获得所有节点名称的列表?
所以,例如,我想要一个列表,如:类型,街道,城市.

php json jsonpath

11
推荐指数
2
解决办法
1195
查看次数

如何使用java中的XPath/JsonPath更改json文件中的值

这是json文件

{
    "session":
        {
            "name":"JSESSIONID",
            "value":"5864FD56A1F84D5B0233E641B5D63B52"
        },
    "loginInfo":
        {
            "loginCount":77,
            "previousLoginTime":"2014-12-02T11:11:58.561+0530"
        }
}
Run Code Online (Sandbox Code Playgroud)

我想更改name.by的值直接给XPath/JsonPath Like

($.session.name).changevalue("MYSESSINID") 这只是一个例子

我正确使用jackson库并使用下面的代码通过XPath进行读取

ObjectMapper mapper = new ObjectMapper();

        Object jsonObj=mapper.readValue(new File(Json file), Object.class);
        Object name=PropertyUtils.getProperty(jsonObj, "session.name");
        System.out.println("Name:"+name);
Run Code Online (Sandbox Code Playgroud)

他们是一种通过XPath更改名称的方法

PropertyUtils.setProperty(jsonObj, "session.value", "new value");
Run Code Online (Sandbox Code Playgroud)

仍然在文件中它无法正常工作.

java xpath json jsonpath jackson

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

使用 jsonpath 选择多个属性

我有一组像这样的对象:

[
    {
        "id": 192,
        "name": "Complete name",
        "username": "nsurname",
        "state": "active",
        "created_at": "2016-05-30T07:09:40.981Z",
        "organization": "",
        "last_sign_in_at": "2018-10-19T12:07:50.679Z",
        "confirmed_at": "2016-05-30T07:09:40.982Z",
        "last_activity_on": "2018-10-15",
        "email": "mail@myorganization.com",
        "current_sign_in_at": "2018-10-23T11:41:27.880Z",
        "identities": [
            {
                "provider": "ldapmain",
                "extern_uid": "user distinguished name"
            }
        ],
        "can_create_group": true,
        "can_create_project": false
    }
]
Run Code Online (Sandbox Code Playgroud)

我想要的是只提取属性的一个子集并得到如下内容:

[
   {
      "id" : 192,
      "name" : "complete name",
      "username" : "uname",
      "email" : "mail@myorganization.com",
      "extern_uid": "user distinguished name"
   }
]
Run Code Online (Sandbox Code Playgroud)

基于此答案,我使用http://jsonpath.herokuapp.com/ 上的Jayway JsonPath Evaluator 成功获得了带有此表达式的 id、name、username 和 email 属性

$..['id', 'name', …
Run Code Online (Sandbox Code Playgroud)

json jsonpath

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

JSONPath中的OR运算符?

单独使用单个JSONPath表达式,是否可以执行某种"OR"或"||" 运营商.例如,这两个JSONPath布尔表达式用于检查日志JSON文件的严重性:

$..log[?(@.severity == 'WARN')]

$..log[?(@.severity == 'Error')]
Run Code Online (Sandbox Code Playgroud)

但我想做一些逻辑上相似的事情:

$..log[?(@.severity == 'WARN' or @.severity == 'Error')] //this is not correct 
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

json jsonpath

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

按属性值在嵌套数据中查找对象(使用JSONPath)

我有这个测试数据:

[
  {
    id: 1,
    l: 'a',
    sub: [
      ]
  },
  {
    id: 2,
    l: 'b',
    sub: [
      {
        id: 4,
        l: 'd'
      },
      {
        id: 5,
        l: 'e'
      },
      {
        id: 6,
        l: 'f',
        sub: [
          {
            id: 7,
            l: 'g'
          }
        ]
      }
    ]
  },
  {
    id: 3,
    l: 'c',
    sub: []
  }
];
Run Code Online (Sandbox Code Playgroud)

而我正试图获得对象的路径id: 7.我尝试了一些JSONPath查询,但我似乎无法弄清楚如何使JSONPath迭代所有sub键并在那里搜索.

我该如何匹配对象id: 7

这是我的测试插件:http://plnkr.co/edit/RoSeRo0L1B2oH3wC5LdU?p =preview

javascript jsonpath

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

键中的点时的 JSONPath 语法

如果我使用了不正确的术语,请原谅我,我是新手。

我有一些简单的 JSON:

{
"properties": {
    "footer.navigationLinks": {
        "group": "layout"
    ,   "default": [
            {
                "text": "Link a"
            ,   "href": "#"
            }
        ]
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我试图查明“footer.navigationLinks”,但我在键名中遇到点问题。我正在使用http://jsonpath.com/并且当我输入时

$.properties['footer.navigationLinks']
Run Code Online (Sandbox Code Playgroud)

我得到“不匹配”。如果我将键更改为“footernavigationLinks”,它会起作用,但我无法控制 JSON 文件中的键名。

请有人帮我定位那个键名吗?

json jsonpath

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

JSON.NET JObject - 如何从这个嵌套的JSON结构中获取值

我有这个JSON:

{
    "client_id": "26075235",
    "client_version": "1.0.0",
    "event": "app.uninstall",
    "timestamp": 1478741247,
    "data": {
        "user_id": "62581379",
        "site_id": "837771289247593785",
        "platform_app_id": "26075235"
    }
}
Run Code Online (Sandbox Code Playgroud)

我将它解析为JSON.NET JObject,我可以使用例如(字符串)RequestBody.SelectToken("client_id")成功访问第一级值

如何使用JPath表达式(或通过访问JSON.NET JObject的子对象)访问"user_id"的值?这不起作用:

(string)RequestBody.SelectToken("data[0].user_id")
Run Code Online (Sandbox Code Playgroud)

我不能这样做来解析JSON的'data'部分:

JObject RequestBodyData =    JObject.Parse((string)RequestBody.SelectToken("data"));
Run Code Online (Sandbox Code Playgroud)

因为编译器似乎将RequestBody.SelectToken("data")识别为对象(我得到错误'无法将对象解析为字符串')

我不想将原始JSON解析为自定义C#对象,因为我正在开发一个解决方案,需要能够将JSON一般性地解析为JObject(或任何其他类型的通用对象来处理JSON),所以它可以以相对一致的方式解析.

c# json json.net jsonpath jpath

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

标签 统计

jsonpath ×10

json ×7

java ×3

c# ×1

etl ×1

jackson ×1

javascript ×1

jpath ×1

json.net ×1

php ×1

presto ×1

spring ×1

spring-cloud-dataflow ×1

xpath ×1