【问题标题】:Python json prase ValueError: No JSON object could be decoded [duplicate]Python json prase ValueError:无法解码JSON对象[重复]
【发布时间】:2017-11-17 17:48:15
【问题描述】:

我实际上在使用 json 字符串和 python 时遇到了问题。我编写了一个使用 find-my-iphone python 模块的脚本,这个模块在输出端给了我这个字符串

{u'locationType': u'', u'altitude': 0.0, u'locationFinished': True, u'longitude': 7.340714223689717, u'positionType': u'GPS', u'floorLevel': 0 , u'timeStamp': 1497518502892L, u'latitude': 47.81268700030429, u'isOld': False, u'isInaccurate': False, u'verticalAccuracy': 0.0, u'horizo​​ntalAccuracy': 50.0}

经过一番论述:

loc = api.devices[deviceID].location()
locstr = str(loc).replace("u'",'"').replace("'",'"') #.replace("}","")

我得到一个如下所示的字符串:

{“locationType”:“”,“altitude”:0.0,“locationFinished”:False,“longitude”:7.340450948111099,“positionType”:“GPS”,“floorLevel”:0,“timeStamp”:1497518436368L,“纬度”:47.81275740829093,“isOld”:假,“isInaccurate”:假,“verticalAccuracy”:0.0,“horizo​​ntalAccuracy”:100.0}

有我的代码: `

from pyicloud import PyiCloudService
from geopy.distance import vincenty
import json
import sys

api = PyiCloudService('*****.*****@free.fr','******')
deviceID = u"Qo+Jyvct3IIl7N3MXrz6LfDvm8qjDCHjkedOvse1mhzWf1sikvSFQOHYVNSUzmWV"          # Needed
deviceNAME = "<AppleDevice(iPhone 5s: David Smartphone)>"                               # Just an help

api.devices[deviceID].location()
api.devices[deviceID].status()

loc = api.devices[deviceID].location()
locstr = str(loc).replace("u'",'"').replace("'",'"') #.replace("}","")

但是当我尝试使用时

json.loads(locstr)

Python 给我:

Traceback(最近一次调用最后一次):文件“distancePAPA.py”,第 19 行, 在 t = json.loads(locstr) 文件“/usr/lib/python2.7/json/init.py”,第 339 行,加载中 在解码中返回 _default_decoder.decode(s) 文件“/usr/lib/python2.7/json/decoder.py”,第 364 行 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 文件“/usr/lib/python2.7/json/decoder.py”,第 382 行,在 raw_decode raise ValueError("No JSON object could be decoded") ValueError: No JSON object could be decoded

我真的不知道我做错了什么,所以我正在寻求帮助

PS1:我真的需要gps坐标 PS2:我是法国人,很抱歉搞错了。

【问题讨论】:

    标签: python json string python-2.7 gps


    【解决方案1】:

    Json 不支持False1497518436368L 中的后缀L;为了使其正常,我们需要再次转换它

    s = locstr.replace('False', 'false').replace('L,', ',')
    

    现在,我们可以使用json.loads(s)

    【讨论】:

      【解决方案2】:
      import json
      
      >>> loc = api.devices[deviceID].location()
      >>> locstr = json.dumps(loc)
      '{"horizontalAccuracy": 50.0, "floorLevel": 0, "isOld": false, "isInaccurate": false, "verticalAccuracy": 0.0, "timeStamp": 1497518502892, "altitude": 0.0, "locationFinished": true, "longitude": 7.340714223689717, "positionType": "GPS", "locationType": "", "latitude": 47.81268700030429}'
      
      >>> json.loads(locstr)
      {u'timeStamp': 1497518502892, u'altitude': 0.0, u'locationFinished': True, u'longitude': 7.340714223689717, u'horizontalAccuracy': 50.0, u'floorLevel': 0, u'locationType': u'', u'latitude': 47.81268700030429, u'isOld': False, u'isInaccurate': False, u'verticalAccuracy': 0.0, u'positionType': u'GPS'}
      

      【讨论】:

      • 感谢您的解决方案,我终于使用了您的解决方案
      【解决方案3】:

      您好,请使用模块 ast

      import ast loc_str = ast.literal_eval(str(loc))

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多