社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

Suresh • 5 年前 • 1642 次点击  
 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
 
1642 次点击  
文章 [ 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