我正面临MySQL JSON_SEARCH函数的问题,该函数不支持布尔值搜索。
请参考以下SQL: https://rextester.com/DYLPJG17389
这是数据库架构:
create table if not exists superheroes (
name varchar(32),
attributes JSON
);
insert into superheroes
values ('Batman', '{"dead": "false", "orphan": true, "billionaire": "true", "goodboy" : "true"}');
SELECT JSON_SEARCH(attributes, 'all', 'true')
FROM superheroes
WHERE name = 'Batman';
drop table superheroes;
现在的结果是:
["$.goodboy", "$.billionaire"]
我需要我的结果应该有"$.orphan"
我无法用true
替换"true"
,因为JSON数据来自外部来源。
谢谢。
答案 0 :(得分:0)
***Library***
Library String
Library Collections
Library RequestsLibrary
***Variables***
${user} = username
${passwd} = pwd
&{headers} Content-Type=application/soap+xml or text/xml Authorization=Basic encrypted details
${body_request} = <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://example.com/schemas</a:Action><a:MessageID>msgid</a:MessageID><a:ReplyTo><a:Address>url</a:Address></a:ReplyTo><a:To s:mustUnderstand="1">serviceurl</a:To></s:Header><s:Body xmlns:xsi=body"></s:Body></s:Envelope>
*** Test Cases ***
${auth}= Create List ${user} ${passwd}
Create Session alias=proc url=url headers=${headers} auth=${auth}
Sleep 5
${resp2} Post Request alias=proc uri=url data=${body_request} json=None params=None
headers=${headers} files=None allow_redirects=True timeout=None
Should Be Equal As Strings ${resp2.status_code} 200
Log To Console ${resp2.status_code}
仅适用于Docmentation所说的字符串
JSON_SEARCH
返回JSON文档中给定字符串的路径
还应在字符串中用双引号括住JSON值
JSON值可以是double quotes中的字符串,也可以是数字,也可以是true或false或null,或者是对象或数组
因此,在您的情况下,一种可能的解决方案是将布尔值JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])
转换为字符串true
。如果无法手动更换,则可以使用"true"
将JSON_REPLACE
更改为true
。由于您已经知道必须更改其值的"true"
,请使用下面的查询来获得所需的结果。
key
输出:
SELECT JSON_SEARCH((JSON_REPLACE(attributes,'$.orphan',"true")), 'all', 'true')
FROM superheroes
WHERE name = 'Batman';
更新
如果键["$.orphan", "$.goodboy", "$.billionaire"]
同时包含orphan
和true
,则可以使用false
和case
如下所示仅替换真实值。
JSON_CONTAINS