标签: json-path-expression

Xpath就像查询嵌套的python词典一样

有没有办法为嵌套的python词典定义XPath类型查询.

像这样的东西:

foo = {
  'spam':'eggs',
  'morefoo': {
               'bar':'soap',
               'morebar': {'bacon' : 'foobar'}
              }
   }

print( foo.select("/morefoo/morebar") )

>> {'bacon' : 'foobar'}
Run Code Online (Sandbox Code Playgroud)

我还需要选择嵌套列表;)

这可以通过@ jellybean的解决方案轻松完成:

def xpath_get(mydict, path):
    elem = mydict
    try:
        for x in path.strip("/").split("/"):
            try:
                x = int(x)
                elem = elem[x]
            except ValueError:
                elem = elem.get(x)
    except:
        pass

    return elem

foo = {
  'spam':'eggs',
  'morefoo': [{
               'bar':'soap',
               'morebar': {
                           'bacon' : {
                                       'bla':'balbla'
                                     }
                           }
              },
              'bla'
              ]
   }

print xpath_get(foo, "/morefoo/0/morebar/bacon")
Run Code Online (Sandbox Code Playgroud)

[编辑2016]这个问题和接受的答案是古老的.较新的答案可能比原始答案更好地完成工作.但是我没有测试它们所以我不会改变接受的答案.

python xpath jmespath json-path-expression

39
推荐指数
6
解决办法
2万
查看次数

JSON路径字符串根值的评估

有一个返回一个非常基本的json响应的服务:

{
    "methodresult": "error",
    "ErrorCode": 2,
    "ErrorCodeText": "format",
    "ErrorMessage": "Json parse exception at pos:171 msg:Expecting \"key\""
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用JSONPath来查询"methodresult"值是否返回"错误".

基于我见过的文档/示例,我希望这可以工作:

$[?(@.methodresult=="error")]
Run Code Online (Sandbox Code Playgroud)

但是基于我正在使用的验证器(https://jsonpath.curiousconcept.com/)我没有看到任何布尔响应.

当试图用一个不在数组中的东西写一个表达式时,我有什么东西不见了?

jsonpath json-path-expression

6
推荐指数
1
解决办法
412
查看次数

我可以在JQ中使用相对路径或通配符吗?

是否可以在JQ中使用相对路径或名称,如XPath //?

或者是否可以在JQ中使用通配符,如.level1.*.level3.element?

jq json-path-expression

5
推荐指数
2
解决办法
4621
查看次数

尝试访问元素附近的无效路径表达式

当尝试更改数组中的单个元素时,我得到Invalid path expression near attempt to access element- 但仅当数组从--rawInput.

例子:

# input: [ 1, 0 ]
. as $list | $list[0] = 30
# output: [ 30, 0 ]
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

# input: 1,0
split(",") | map(tonumber) as $list | $list[0] = 30
# Invalid path expression near attempt to access element 0 of [1,0]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

arrays json jq json-path-expression

5
推荐指数
1
解决办法
661
查看次数

在 kubectl jsonpath 中解码 base64

我有一个与此类似的命令

kubectl get secrets \
--selector='my-selector' \
-o jsonpath='{range .items[*] }{"\n"}{.metadata.labels.cluster-name}{"."}{.metadata.namespace {":"}{"5432"}{"postgres" }{":"}{.data.password}{end}'
Run Code Online (Sandbox Code Playgroud)

它输出这样的列表(需要格式)

cluster-name.namespace:5432:postgres:YbHF....==
cluster-name.namespace:5432:postgres:YbHF....==
cluster-name.namespace:5432:postgres:YbHF....==

Run Code Online (Sandbox Code Playgroud)

我需要解码该文件的 base64 并使用kubectl 备忘单作为参考,其中给出了以下示例:

# Output decoded secrets without external tools
kubectl get secret my-secret -o go-template='{{range $k,$v := .data}}{{"### "}}{{$k}}{{"\n"}}{{$v|base64decode}}{{"\n\n"}}{{end}}'
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法

cluster-name.namespace:5432:postgres:YbHF....==
cluster-name.namespace:5432:postgres:YbHF....==
cluster-name.namespace:5432:postgres:YbHF....==

Run Code Online (Sandbox Code Playgroud)

结果是除了现在为空的密码字段之外的所有内容都显示出来,例如:

cluster-name.namespace:5432:postgres:
Run Code Online (Sandbox Code Playgroud)

任何指示将不胜感激。

base64 kubernetes kubectl json-path-expression

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

Apache NiFi 评估jsonpath 处理器:用于连接 2 个属性的 JSONPath 表达式

我在 NiFi 中使用 EvaluateJsonPath 处理器来指定一个复合主键,用于将我的 JSON 数据写入 elasticsearch。我必须通过连接两个属性来创建一个名为“key”的属性,比如“attr1”和“attr2”。在 EvaluateJsonPath 配置中,我添加了一个值为“${attr1}${attr2}”的属性“key”(我使用这个键来避免 elasticsearch 中的冗余)。但是我收到了类似的错误:'key' is invalid 因为指定的表达式无效:${attr1}${attr2}。

使用 EvaluateJsonPath 处理器连接 json 记录中的 2 个属性的正确语法是什么?

apache-nifi json-path-expression

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

NiFi EvaluateJsonPath 数组长度

我有以下 JSON:

{
    "hits": {
         "hits":[]
    }
}
Run Code Online (Sandbox Code Playgroud)

(ElasticSearch 的一些回应)。

我想使用处理器EvaluateJsonPath来获取 的长度hits.hits

我尝试了以下表达式:

$.hits.hits.length

但我收到以下错误:

FlowFile could not find path $['hits']['hits']['length'] for attribute key hits.:(这是错误的结束)。

然而,当使用 JsonEvaluate 网站在线检查时,它似乎有效。

我的表情怎么了?

json jsonpath apache-nifi json-path-expression

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

是否可以获取存储在 SQL 列中的 json 字符串的所有路径

假设我有一个 JSON 数据存储在varchar(max)数据库的列中。是否可以使用 SQL 获取该数据中存在的所有 JSON 路径。例如对于以下 JSON:

{
    "dog":
    { 
        "name":"Rover",
        "age": 6,
        "likes:["catch", "eating"]
    }
}
Run Code Online (Sandbox Code Playgroud)

我会得到以下输出:

$.
$.dog
$.dog.name
$.dog.age
$.dog.likes[0]
$.dog.likes[1]
Run Code Online (Sandbox Code Playgroud)

我研究过包括json_queryand在内的函数json_value,但它们似乎更多的是从 JSON 获取数据,而不是我需要的元数据。

我正在使用 SQL Server 2018。

sql sql-server json json-path-expression

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