我正在使用最新的(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路径是什么?
我正在尝试编写一个简单的 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) 题:
我有一个服务,它接受一个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']中缺少属性
当我给它一条不存在的道路时.有谁知道这可能导致什么?
考虑以下JSONPath:
{
"result":[
{
"type":"Residence",
"street":"Piazza di Spagna",
"city":"-4:0"
},
{
"type":"Residence",
"street":"test",
"city":"-4:1"
}
]
}
Run Code Online (Sandbox Code Playgroud)
是否有可能获得所有节点名称的列表?
所以,例如,我想要一个列表,如:类型,街道,城市.
这是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)
仍然在文件中它无法正常工作.
我有一组像这样的对象:
[
{
"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) 单独使用单个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)
有没有办法做到这一点?
我有这个测试数据:
[
{
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
如果我使用了不正确的术语,请原谅我,我是新手。
我有一些简单的 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:
{
"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),所以它可以以相对一致的方式解析.