Py学习  »  DATABASE

如何从JSON数组MySQL中获取特定值

Suresh • 5 年前 • 1762 次点击  
 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"     
      }
    ]'

SELECT JSON_EXTRACT (JSON_EXTRACT(@a,'$[3]'),'$.zone_name') ;

任何关于如何根据“lng”键fyi获取数据的建议,都将在Select查询中使用。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/55173
文章 [ 1 ]  |  最新文章 5 年前
Nick
Reply   •   1 楼
Nick    5 年前

你可以用 JSON_SEARCH 找到用户所需语言的路径,例如。

SELECT JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')

这将返回类似于 "$[1].lng" . 那你可以 JSON_UNQUOTE 价值和用途 SUBSTRING_INDEX . ,即。 $[1] . 然后可以将其用作 JSON_EXTRACT 与连接时 .zone_name

SELECT JSON_EXTRACT(@a, CONCAT(SUBSTRING_INDEX(JSON_UNQUOTE(JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')), '.', 1), '.zone_name'))

输出:

"Zone B ENG"

Demo on dbfiddle

注意输出值周围有双引号,您可能需要删除那些 JSON引用 为了得到 Zone B ENG

还请注意,您可以使用 REPLACE 替换 .lng 具有 .区域名称 :

SELECT JSON_EXTRACT(@a, REPLACE(JSON_UNQUOTE(JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')), '.lng', '.zone_name'))

Demo on dbfiddle

JSON_TABLE 创造生命的功能 更容易的:

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'

输出:

lng     zone_name   zone_location           about_zone
eng     Zone B ENG  Zone B Location ENG     About Zone EN

Demo on dbfiddle