【问题标题】:Struggling with path when using JSON_EXTRACT使用 JSON_EXTRACT 时遇到路径问题
【发布时间】:2019-06-03 05:24:07
【问题描述】:

我有使用 geostamps 存储在 mysql 中的元数据。 我想提取一组特定数据的经纬度,我一生都无法弄清楚将级别指定为值的语法

我需要单独的值,以便我可以使用它来检查该位置是否与记录的位置匹配,如果不是距离。 gps计算部分很简单。

我感兴趣的数据串是这样的:

"outcome_rating":{"value":"continue_support","timestamp":"2019-05-29 16:11:07", "geostamp":"lat=-29.787506666666665, long=31.022944999999996, alt=64.0 , 准确度=8.2"}

该表称为“监控” 该字段称为“devicemagic_metadata”

我的尝试

SELECT
    select JSON_EXTRACT(devicemagic_metadata, "$.outcome_rating"."$.geostamp"."$.lat")
FROM monitorings;

任何帮助或指导将不胜感激

【问题讨论】:

    标签: mysql nested-datalist json-extract


    【解决方案1】:

    您当前的 JSON 内容无效,因为它确实包含一个未出现在大括号内的外部键。下面看看正确的格式应该是什么。此解决方案假定您使用的是 MySQL 8+,它具有正则表达式替换功能。如果不是,那么您将需要一些非常丑陋的字符串函数调用来将纬度和经度与 JSON 值隔离开来。

    WITH monitorings AS (
        SELECT '{"outcome_rating":{"value":"continue_support","timestamp":"2019-05-29 16:11:07", "geostamp":"lat=-29.787506666666665, long=31.022944999999996, alt=64.0, accuracy=8.2"}}' AS devicemagic_metadata
    )
    
    SELECT
        REGEXP_REPLACE(JSON_EXTRACT(devicemagic_metadata, "$.outcome_rating.geostamp"),
            '^"lat=([^,]+),.*$', '$1') AS lat,
        REGEXP_REPLACE(JSON_EXTRACT(devicemagic_metadata, "$.outcome_rating.geostamp"),
            '^.*long=([^,]+),.*$', '$1') AS lng
    FROM monitorings;
    

    Demo

    【讨论】:

      猜你喜欢
      • 2019-05-06
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 2019-08-18
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多