我有一个SQL列,它有一个JSON数组:
{"names":["Joe","Fred","Sue"]}
Run Code Online (Sandbox Code Playgroud)
给定一个搜索字符串,我如何使用SQL在names数组中搜索匹配?我正在使用SQL 2016并查看了JSON_QUERY,但不知道如何在JSON数组上搜索匹配项.像下面这样的东西会很好.
SELECT *
FROM table
WHERE JSON_QUERY(column, '$.names') = 'Joe'
Run Code Online (Sandbox Code Playgroud) 我有一个authors带有列的MySQL表id,name和published_books.在这里,published_books是一个JSON列.有样本数据,
id | name | published_books
-----------------------------------------------------------------------
1 | Tina | {
| | "17e9bf8f": {
| | "name": "Book 1",
| | "tags": [
| | "self Help",
| | "Social"
| | ],
| | "language": "English",
| | "release_date": "2017-05-01"
| | },
| | "8e8b2470": {
| | "name": "Book 2",
| | "tags": [
| | "Inspirational"
| | ],
| | "language": "English",
| …Run Code Online (Sandbox Code Playgroud) 我想在 json 查询过滤器中使用 ansible 变量。这是我的代码:
剧本执行:
ansible-playbook debug.yml -e "project_environment=live"
Run Code Online (Sandbox Code Playgroud)
ansible-playbook debug.yml -e "project_environment=live"
Run Code Online (Sandbox Code Playgroud)
这是我的字典:
- debug:
msg: "{{ project_environment }}"
- debug:
msg: "{{ check_objects | json_query('`{{project_environment}}`.current') }}"
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
TASK [debug : debug]
ok: [sample-hostname] => {
"msg": "live"
}
TASK [debug : debug]
ok: [sample-hostname] => {
"msg": ""
}
Run Code Online (Sandbox Code Playgroud)
当我使用预期值替换变量时,输出工作正常:
check_objects:
live:
current:
- example.com
next:
- next.example.com
Run Code Online (Sandbox Code Playgroud)
TASK [typo3-deployment/check : debug]
ok: [sample-hostname] => {
"msg": [
"example.com"
]
}
Run Code Online (Sandbox Code Playgroud)
我认为它在插入变量时遇到了麻烦。
我已经尝试过这个解决方案,但它也不起作用:Ansible:在 json_query 过滤器中传递一个变量
我正在处理一个具有 JSON 格式列的表,我想从该列中提取坐标值。
所以我运行以下代码:
Select *,JSON_VALUE(field,'$."Coordinate-X"[0]') As coordinate INTO TABLE_1 FROM table
WHERE JSON_VALUE(field,'$."Coordinate-X"[0]') IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
运行5分钟后出现以下错误
消息 13609,级别 16,状态 1,第 27 行 Json 文本格式不正确。在位置 151 处发现意外字符“”。
当我尝试检查一些前 200 * 以下的行时,代码返回结果,没有任何错误
Select TOP 200 *,JSON_QUERY(field,'$."Coordinate-X"[0]') As coordinate FROM table
WHERE JSON_VALUE(field,'$."Coordinate-X"[0]') IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
我想我有一行导致了错误,但我不知道如何识别它或排除该行并返回结果。
我正在尝试使用“for json path”语句在复杂且嵌套的 JSON 字符串中生成大量数据,并且我使用多个函数来创建此 JSON 字符串的不同部分,如下所示:
declare @queue nvarchar(max)
select @queue = (
select x.ID as layoutID
, l.Title as layoutName
, JSON_QUERY(queue_objects (@productID, x.ID)) as [objects]
from Layouts x
inner join LayoutLanguages l on l.LayoutID = x.ID
where x.ID = @layoutid
group by x.ID, l.Title
for json path
)
select @queue as JSON
Run Code Online (Sandbox Code Playgroud)
到目前为止,JSON 将是:
{
"root": [{
"layouts": [{
"layoutID": 5
, "layoutName": "foo"
, "objects": []
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
然后将调用“queue_objects”函数来填充“objects”数组:
select 0 as objectID
, …Run Code Online (Sandbox Code Playgroud) 我有一个表[JsonTable],列[JsonData]保存json字符串,
JsonData像:
{
"Names": ["John", "Joe", "Sam"]
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能像这样内部连接该表:
SELECT* FROM [TestTable] AS T
INNER JOIN [JsonTable] AS J ON T.[Name] IN JSON_QUERY(J.[JsonData], '$.Names')
Run Code Online (Sandbox Code Playgroud) 有谁知道在下面的示例JSON中可以使用什么json查询过滤器来选择Tigger的食物?JSON是大规模且相对复杂的AWS blob的简化替代.
一些背景:我很高兴发现Ansible有一个json查询过滤器.鉴于我试图从AWS JSON blob中选择一个元素,这看起来就像我需要的那样.但是我很快遇到了麻烦,因为AWS对象有标签,我需要按标签选择项目.我尝试了相当于Foods[Tags[(Key='For') & (Value='Tigger')]]和类似的选择器路径,但没有设法让它工作.使用独立的JSON-查询库如https://www.npmjs.com/package/json-query我可以使用parent属性,但是,这并不似乎是在Ansible,撇开是从核心理念的偏差JSON查询.
回避问题并使用jsonpath选择器可能会更好.jsonpath类似于json-query,是xpath的翻译.
{ "Foods" :
[ { "Id": 456
, "Tags":
[ {"Key":"For", "Value":"Heffalump"}
, {"Key":"Purpose", "Value":"Food"}
]
}
, { "Id": 678
, "Tags":
[ {"Key":"For", "Value":"Tigger"}
, {"Key":"Purpose", "Value":"Food"}
]
}
, { "Id": 911
, "Tags":
[ {"Key":"For", "Value":"Roo"}
, {"Key":"Purpose", "Value":"Food"}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
非常感谢!
参考文献:
我想用json-query来标记这个问题,但是缺乏这样做的要点.
我想使用JSON_VALUE以下方法查询表中的数据:
var str = "123";
var value = "Name"
using(var conn = GetMyConnection())
{
var result = conn.QueryFirstOrDefault<string>(
@"SELECT [Id] FROM [dbo].[MyTable]
WHERE JSON_VALUE([JsonColumn], @MyQuery) = @Str",
new
{
MyQuery = $"$.{value}",
Str = str
}
);
}
Run Code Online (Sandbox Code Playgroud)
我在SQL Server中尝试这个,它正在工作:
SELECT [Id] FROM [dbo].[MyTable]
WHERE JSON_VALUE([JsonColumn], '$.Name') = '123'
Run Code Online (Sandbox Code Playgroud)
我应该如何调整我的代码?
我的表中有一个nvarchar(1000)字段,并且正在该列中存储JSON数据。
例如:
CONTENT_RULE_ID CONTENT_RULE
1 {"EntityType":"Inquiry", "Values":[1,2]}
2 {"EntityType":"Inquiry", "Values":[1,3]}
3 {"EntityType":"Inquiry", "Values":[2,4]}
4 {"EntityType":"Inquiry", "Values":[5,6,1]}
6 {"EntityType":"Inquiry", "Values":[8,1]}
8 {"EntityType":"Inquiry", "Values":[10,12,11]}
Run Code Online (Sandbox Code Playgroud)
由此我如何在sql server中使用JSON_QUERY获取所有查询ID为1的CONTENT_RULE_ID
我正在尝试使用类似于SQL的查询语法找到一种过滤器js集合的方法.
我发现完成此任务的唯一库是json-query.
它在某些情况下有效,但它有局限性.对于多个结果,不可能使用相同的查询或查询在不同的对象级别上进行查询.
以下是一些示例(以下面的数据结构作为参考)
[{
"type": "UU",
"value": "100",
"tipo": "G",
"strumento": "P",
"aspetto": "C",
"unit": "ml"
},
{
"type": "PS",
"value": "120/88",
"rilevamento": "Manuale",
"lato": "SX",
"part": "Supina",
"unit": "mmHg"
},
{
"type": "TP",
"value": "33.6",
"tipo": "T",
"unit": "°C"
},
{
"type": "VO",
"value": "12",
"tipo": "VOAL",
"unit": "ml"
},
{
"type": "RS",
"value": "60",
"unit": "atti/min"
},
{
"type": "HH",
"value": "180",
"modalita": "R",
"unit": "cm"
},
{
"type": "AA",
"value": "50",
"unit": "cm"
}, …Run Code Online (Sandbox Code Playgroud) json-query ×10
json ×4
sql ×3
ansible ×2
sql-server ×2
t-sql ×2
arrays ×1
c# ×1
dapper ×1
for-json ×1
inner-join ×1
javascript ×1
jmespath ×1
jquery ×1
json-value ×1
mysql ×1
mysql-5.7 ×1
mysql-json ×1