『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 11995|回复: 6

[已解决] rest获取的json中部分字段含反斜杠,请问如何处理?

[复制链接]

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24331
金钱
22900
HASS币
290
发表于 2021-1-27 20:34:10 | 显示全部楼层 |阅读模式
本帖最后由 dscao 于 2021-1-29 23:49 编辑

  - platform: rest 获取到以下json,但HD_RECENT_LOCATION中多了“\”,这种情况如何处理?
搜索了很久也没找到相关方法,对python不懂,都是照着例子来修改的。
{
        "ERROR_CODE": 0,
        "MESSAGE": {
                "P_NAME": "联网版",
                "HD_STATE": 2,
                "HD_RECENT_LOCATION": "{\"Time\":\"2021-01-24 21:00:35\",\"Speed\":0,\"Lat\":30.223462,\"Lng\":117.477132,\"Course\":344,\"Prev2\":{\"Speed\":4,\"Lat\":30.223453,\"Lng\":117.477137,\"Course\":344},\"CSQ\":24}",
                "HD_AUTH_CODE": "UV_295571",
                "HD_REGISTER_TIME": "2020-09-30 18:11:03",
                "HD_STATE_TIME": "2021-01-24 21:00:37",
                "HD_LINE_GROUP": null
        }
}


最好能输出以下属性:
json_attributes:
    - longitude
    - latitude


请教一下怎么处理这个数据?

-------------------------------------


2021年1月29日
上面的问题通过插件方式,以国网电费和油价两个插件为基础修改成了一个,将获取的数据进行字符替换后再json.loads后正常,地图中也可以显示。


只是sensor实体,想把这个做成 device_tracker,目前在寻找device_tracker.py的参考样例,需要是汽车的网站中抓取数据后的结果转换成device_tracker实体,论坛中好像有一个最接近的(https://bbs.hassbian.com/thread-11033-1-1.html),但是没找到插件文件。




02.jpg



回复

使用道具 举报

32

主题

986

帖子

4233

积分

论坛元老

Rank: 8Rank: 8

积分
4233
金钱
3207
HASS币
110

教程狂人论坛风云人物

发表于 2021-1-27 21:57:21 | 显示全部楼层
你这个数据是在哪里处理。模板还是python。感觉直接把 "{ "} "\ 三个替换就行。
回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24331
金钱
22900
HASS币
290
 楼主| 发表于 2021-1-28 00:09:10 | 显示全部楼层
本帖最后由 dscao 于 2021-1-28 00:10 编辑
27hh 发表于 2021-1-27 21:57
你这个数据是在哪里处理。模板还是python。感觉直接把 "{ "} "\ 三个替换就行。 ...

直接在rest中处理的,不知如何来替换。

sensor:
  - platform: rest
    name: youjia
    resource: http://restcore.gooddriver.cn/API/Values/HudDeviceDetail/XXXXX
    scan_interval: 60
    headers:
      Host: restcore.gooddriver.cn
      SDF: XXXXXXXXXXXXXXXXXXXXX 
      Accept: \*/\*
      User-Agent: gooddriver/.7.1 CFNetwork/1209 Darwin/20.2.0
      Accept-Language: zh-cn
      Accept-Encoding: gzip, deflate
      Connection: keep-alive
    # json_attributes_path: "$.MESSAGE.HD_RECENT_LOCATION"
    # json_attributes:
        # - \Lng
        # - \Lat
        # - \Course
        # - \Speed
    value_template: >-
          {% if value_json.ERROR_CODE == 0 %}
            有效
          {% else %}
            无效
          {% endif %}
    json_attributes:
      - MESSAGE
    
  - platform: template
    sensors:
      car_time:
        value_template: '{{ states.sensor.youjia.attributes.MESSAGE.HD_RECENT_LOCATION.Time }}'   #取不到值


回复

使用道具 举报

17

主题

320

帖子

2495

积分

金牌会员

Rank: 6Rank: 6

积分
2495
金钱
2175
HASS币
20
发表于 2021-1-28 08:29:38 | 显示全部楼层
你这返回的就有问题 其他的键值对正常 就这个HD_RECENT_LOCATION的值加了转义
回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24331
金钱
22900
HASS币
290
 楼主| 发表于 2021-1-28 10:51:29 | 显示全部楼层
这个是从app抓包出来的,这个结果是没法改变的。就是遇到这种情况怎么处理转换一下呢?
回复

使用道具 举报

5

主题

322

帖子

1345

积分

金牌会员

Rank: 6Rank: 6

积分
1345
金钱
1023
HASS币
0
发表于 2021-1-29 20:47:08 | 显示全部楼层
在 开发者工具-状态 看看它的message内容是什么再想办法!
回复

使用道具 举报

1

主题

47

帖子

1081

积分

金牌会员

Rank: 6Rank: 6

积分
1081
金钱
1034
HASS币
0
发表于 2021-3-20 08:39:56 | 显示全部楼层
非常好,学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 09:55 , Processed in 0.080643 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表