我想获取已定义接口类型的地址列表。我在这里
找到了一些信息。
这是我的剧本:
- name: Test JMESPath
hosts: localhost
gather_facts: no
vars:
interfaces:
- name: em0
address: 10.127.37.89/29
- name: bge0
address: 10.112.171.81/28
- name: bge1
address: 10.112.171.65/28
- name: bge2
address: 10.112.171.97/28
tasks:
- name: JMESPath query
set_fact:
result: "{{ interfaces | json_query(query) }}"
vars:
query: "[?name.contains(@, 'bge')].address"
- debug:
var: result
Run Code Online (Sandbox Code Playgroud)
我想得到:
[
"10.112.171.81/28",
"10.112.171.65/28",
"10.112.171.97/28"
]
Run Code Online (Sandbox Code Playgroud)
它可以在 JMESPath 网站上运行,但我的剧本失败了:
Run Code Online (Sandbox Code Playgroud)ansible-playbook play-testJMESPath.yml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost …
最近开始学习MongoDB。今天老师教了我们mongoexport命令。在练习时,我遇到了一个典型的问题,包括教练在内的其他同学都没有遇到过。我在Windows 10机器上使用MongoDB 版本 4.2.0。
如果我在没有任何 -q 参数的情况下为我的集合使用 mongoexport 来指定任何过滤条件,它工作正常。
mongoexport -d trainingdb -c employee -f empId,name,designation -o \mongoexport\all-employees.json
2019-09-17T18:00:30.300+0530 connected to: mongodb://localhost/
2019-09-17T18:00:30.314+0530 exported 3 records
Run Code Online (Sandbox Code Playgroud)
但是,每当我将 JSON 查询指定为 -q(或 --query)时,它都会给出如下错误。
mongoexport -d trainingdb -c employee -f empId,name,designation -q {'designation':'Developer'} -o \mongoexport\developers.json
2019-09-17T18:01:45.381+0530 connected to: mongodb://localhost/
2019-09-17T18:01:45.390+0530 Failed: error parsing query as Extended JSON: invalid JSON input
Run Code Online (Sandbox Code Playgroud)
在我为查询尝试的所有不同风格中,同样的错误仍然存在。
-q {'designation':'Developer'}
--query {'designation':'Developer'}
-q "{'designation':'Developer'}"
Run Code Online (Sandbox Code Playgroud)
我什至尝试在 'empId' 上使用不同的查询条件作为 -q {'empId':'1001'} 但没有运气。我不断收到同样的错误。
根据StackOverflow 网站中给出的建议之一,我尝试了以下选项,但遇到了不同的错误。 …
我正在寻找 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 中的一行)有什么建议吗?
给定下面的示例 json 数据,我如何编写查询以一步提取所有数组数据?我的目标是 ActionRecs 数组 (4) 中的每个项目都有一行。我的实际 json 更复杂,但我认为这为我的目标提供了一个很好的例子。
declare @json2 nvarchar(max)
set @json2 = '{
"RequestId": "1",
"ActionRecs": [
{
"Type": "Submit",
"Employee": "Joe"
},
{
"Type": "Review",
"Employee": "Betty"
},
{
"Type": "Approve",
"Employee": "Sam"
},
{
"Type": "Approve",
"Employee": "Bill"
}
]
}'
SELECT x.*
, JSON_QUERY(@json2, '$.ActionRecs') as ActionArray
from OPENJSON(@json2)
with (Id varchar(5) '$.RequestId') as x
Run Code Online (Sandbox Code Playgroud)
我正在使用 mssql 并且一列有 json 数据,我想通过传递 id 来更新该 json 的那部分(数组)。
{
"customerName":"mohan",
"custId":"e35273d0-c002-11e9-8188-a1525f580dfd",
"feeds":[
{
"feedId":"57f221d0-c310-11e9-8af7-cf1cf42fc72e",
"feedName":"ccsdcdscsdc",
"format":"Excel",
"sources":[
{
"sourceId":69042417,
"name":"TV 2 Livsstil"
},
{
"sourceId":69042419,
"name":"Turk Max"
}
]
},
{
"feedId":"59bbd360-c312-11e9-8af7-cf1cf42fc72e",
"feedName":"dfgdfgdfgdfgsdfg",
"format":"XmlTV",
"sources":[
{
"sourceId":69042417,
"name":"TV 2 Livsstil"
},
{
"sourceId":69042419,
"name":"Turk Max"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
假设如果我要通过customerId和feedId,它应该用我已经通过的提要更新整个提要。
我尝试使用以下查询,但没有帮助。
UPDATE
ExtractsConfiguration.dbo.Customers
SET
configJSON = JSON_MODIFY(configJSON,'$.feeds[]',{"feedName":"ccsdcdscsdc"})
WHERE
CustomerId = '9ee07040-c001-11e9-b29a-55eb3439cd7c'
AND json_query(configJSON,'$.feeds[].feedId'='57f221d0-c310-11e9-8af7-cf1cf42fc72e');
Run Code Online (Sandbox Code Playgroud) 有了这本剧本
---
- name: ReadJsonfile
hosts: localhost
tasks:
- name: Display the JSON file content
shell: "cat config.json"
register: result
- name: save the Json data to a Variable as a Fact
set_fact:
jsondata: "{{ result.stdout | from_json }}"
- name: setDomainName
set_fact:
domain_name: "{{ jsondata | json_query(jmesquery) }}"
vars:
jmesquery: '[].domain[].name'
Run Code Online (Sandbox Code Playgroud)
我的 Linux 服务器上有两个用户:user1和user2
python3.8、pip、ansible-core、ansible-base&jmespath已安装。
我登录user1 ,上面的剧本运行良好
ansible-playbook test.yml
但是,当我登录并user2运行相同的命令时,我收到以下错误
任务 [setDomainName] ************************************************** ********************************************** …
我在ansible中有以下json输出:
[{
"active_transaction": null,
"cores": 4,
"hostname": "alpha-auth-wb01"
},
{
"active_transaction": null,
"cores": 4,
"hostname": "beta-auth-wb01"
}]
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试过滤输出以仅显示主机名包含 alpha 的输出。
输出应该是:
[{
"active_transaction": null,
"cores": 4,
"hostname": "alpha-auth-wb01"
}]
Run Code Online (Sandbox Code Playgroud)
代码和结果:
jq: "[?contains(hostname, 'alpha')]"
fatal: [worker.domain]: FAILED! => {"msg": "JMESPathError in json_query filter plugin:\\nIn function contains(), invalid type for value: None, expected one of: ['array', 'string'], received: \\"null\\""}
Run Code Online (Sandbox Code Playgroud)
还尝试添加 from_json | to_json 反之亦然。还是失败了。
任何想法都非常感谢!
json-query ×7
json ×5
ansible ×3
jmespath ×2
sql-server ×2
installation ×1
jsonpath ×1
mongodb ×1
mongoexport ×1
python ×1