javascript - 在 python 中使用 json.loads() 的问题

标签 javascript python json python-2.7 beautifulsoup

我正在尝试从嵌套的 Java 脚本结构中获取数据。我想为此使用 json.loads() 。但是,我收到一条错误消息,提示 "No JSON object could be decoded"

以下是我试过的代码和java脚本结构: 代码

page_us = urllib2.urlopen('http://www.verizonwireless.com/smartphones-2.shtml')

soup_us = BeautifulSoup(page_us)
scripts_us = soup_us.findAll('script')

script=[]
for s in scripts_us:
    if s.string and "$j('#module_1_Tile" in s.string:
        script.append(s.text.split('data')[1].replace("\n","").replace("(","").replace(")","").replace(";","").replace("\t",""))

数据结构

script[1] = u'{"phones":{"id5986":{"id":"5986","rating":"stars_4","colorName":"White","colorCode":"#FFFFFF","capacity":"16 GB","price":"$149.99","fullPrice":"$599.99","addToCartQty":"0","image":"http://s7.vzw.com/is/image/VerizonWireless/Motorola%5Fdroid%5Frazr%5Fhd%5Fwhite?$device%2Dmed$","ATCST":"submitThisPhone","MAST":"false","CIL":"0","IRURL":"https://preorder.verizonwireless.com/iconic/","BAGX":"false","priceRange":"150","rating":"4","OOS":"","freeShipping":"freeOvernightShippingHTML","bagxGetPhone":"","badges":{"lteBadge","vzwExclusiveBadge","globalReadyBadge"},"vPrice":"$221.96","vFullPrice":"$671.96","vBundleName":"DROID RAZR HD by Motorola in White Bluetooth&reg Pack","vBundleImage":"http://s7.vzw.com/is/image/VerizonWireless/moto%5Fdroid%5Frazr%5Fhd%5Fwht%5Fbluetooth%5Fvirt%5Fbndl?$device%2Dmed$","vBundleDescription":"<ul><li>Bluetooth&reg Headset</li><li>Clear Hard Cover</li><li>Vehicle Charger</li></ul>"},"id5985":{"id":"5985","rating":"stars_4_5","colorName":"Black","colorCode":"#000000","capacity":"16 GB","price":"$149.99","fullPrice":"$599.99","addToCartQty":"0","image":"http://s7.vzw.com/is/image/VerizonWireless/Motorola%5Fdroid%5Frazr%5Fhd%5Fblack?$device%2Dmed$","ATCST":"submitThisPhone","MAST":"false","CIL":"0","IRURL":"https://preorder.verizonwireless.com/iconic/","BAGX":"false","priceRange":"150","rating":"4_5","OOS":"","freeShipping":"freeOvernightShippingHTML","bagxGetPhone":"","badges":{"lteBadge","vzwExclusiveBadge","globalReadyBadge"},"vPrice":"$221.96","vFullPrice":"$671.96","vBundleName":"DROID RAZR HD by Motorola Bluetooth&reg Pack","vBundleImage":"http://s7.vzw.com/is/image/VerizonWireless/moto%5Fdroid%5Frazr%5Fhd%5Fblk%5Fbluetooth%5Fvirt%5Fbndl?$device%2Dmed$","vBundleDescription":"<ul><li>Bluetooth&reg Headset</li><li>Silicone Cover</li><li>Vehicle Charger</li></ul>"}},"options":{"colorName":"Black","colorCode":"#000000","capacity":"16 GB"},"info":{"brand":"486","os":"10351","features":{502,569,501,568,247,318,85,503,497,431,458,11,49,150,44,17,141,145,165,20,58,15,24,172,186,184,159,187,185,199,156,249,157,189,142,168,211,13,188,239,14,167,321,41,25,357,443,441,442,444,459,418,416,12,413,5,61,7,446,504,362,573,202,522,"hasVB"},"priceRange":"150","phoneId":"id5985","ATCST":"submitThisPhone","MAST":"false","CIL":"0","IRURL":"https://preorder.verizonwireless.com/iconic/","bagxGetPhone":"","BAGX":"false"}}'

json.loads 适用于 script[0],但在 script[1] 上会出现上述错误。请让我知道我在这里错过了什么。谢谢。

最佳答案

这部分用花括号代替方括号 -

{"lteBadge","vzwExclusiveBadge","globalReadyBadge"}

应该是-

["lteBadge","vzwExclusiveBadge","globalReadyBadge"]

您可以使用 Python 来帮助您识别这些错误 -

>>> from ast import literal_eval
>>> # Break it into lines to check location of error
>>> s = data_structure.replace(',', ',\n')
>>> literal_eval(s)

关于javascript - 在 python 中使用 json.loads() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14812892/

相关文章:

javascript - 在小数点或字符串末尾使用正则表达式分割数字。

javascript - Dynamics CRM 365 WebApi 8.2 AddListMembersList 方法

python - 如何将请求上下文重定向到 Django 中的另一个 url

java - 使用 Jackson 的 JSON 数据特殊字段

javascript - 读取本地 XML 文件进行解析

javascript - 无法在 jqGrid 中设置日期格式和下拉文本

python - 使用包含单引号的 json 更新 PostgreSQL 中的 jsonb 字段

Python 二进制文件 CTime 4 字节

php - 访问 json 对象中的数字属性

python - Flask-restful : How to only response to requests come with ('Accept' :'application/json' )?