Set @a='[
{
"lng": "ch",
"zone_name": "簡體中文",
"zone_location": "A區位置",
"about_zone": "區域描述在這裡輸入"
},
{
"lng": "eng",
"zone_name": "Zone B ENG",
"zone_location": "Zone B Location ENG",
"about_zone": "About Zone EN"
},
{
"lng": "jp",
"zone_name": "ゾーン名はこちら",
"zone_location": "ゾーンの場所はこちら",
"about_zone": "ゾーンの説明はここに入力してください"
},
{
"lng": "es",
"zone_name": "Zone Locatio aquí",
"zone_location": "Nombre de ubicación aquí",
"about_zone": "La descripción debe ingresar aquí sobre nosotros O puede asegurarse de que no haya texto de frenado"
}
]'
Estou armazenando dados de idioma no formato JSON, tentando buscar o nome com base no idioma do usuário, ou seja, se o idioma preferido do usuário é o inglês, então deve retornar o texto em inglês.
SELECT JSON_EXTRACT (JSON_EXTRACT(@a,'$[3]'),'$.zone_name') ;
qualquer sugestão de como buscar dados com base na chave "lng" fyi, será usada na consulta Select.
Você pode usar JSON_SEARCH
para encontrar um caminho para o idioma desejado pelos usuários, por exemplo
SELECT JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')
Isso retornará algo como "$[1].lng"
. Você pode então JSON_UNQUOTE
esse valor e usar SUBSTRING_INDEX
para obter a parte à esquerda do .
, ou seja $[1]
. Isso pode ser usado como um caminho para JSON_EXTRACT
quando concatenado com .zone_name
:
SELECT JSON_EXTRACT(@a, CONCAT(SUBSTRING_INDEX(JSON_UNQUOTE(JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')), '.', 1), '.zone_name'))
Resultado:
"Zone B ENG"
Observe que o valor de saída tem aspas duplas, você pode querer removê-las JSON_UNQUOTE
para apenas obter Zone B ENG
.
Observe também que você pode usar REPLACE
para substituir .lng
no caminho retornado JSON_SEARCH
por .zone_name
:
SELECT JSON_EXTRACT(@a, REPLACE(JSON_UNQUOTE(JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')), '.lng', '.zone_name'))
Se estiver usando MySQL 8.0+, você pode usar a JSON_TABLE
função para tornar a vida muito mais fácil:
SELECT *
FROM JSON_TABLE(@a,
"$[*]" COLUMNS(
lng VARCHAR(4) PATH "$.lng",
zone_name VARCHAR(20) PATH "$.zone_name",
zone_location VARCHAR(20) PATH "$.zone_location",
about_zone VARCHAR(20) PATH "$.about_zone"
)
) AS j
WHERE lng = 'eng'
Resultado:
lng zone_name zone_location about_zone
eng Zone B ENG Zone B Location ENG About Zone EN
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras