首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串转换为对象时发出的问题

将字符串转换为对象时发出的问题
EN

Stack Overflow用户
提问于 2019-07-01 12:07:04
回答 2查看 66关注 0票数 1

我有一个json文件,我想从a元素中提取a属性。该属性包含一个对象,我希望从中提取open_eligible键值。

下面是开始的JSON:

代码语言:javascript
复制
{"html":"<div class='car_model_estimation_result__container'>\n<div class='car_model_estimation_result cobalt-mb-tight'>\n<div class='car_model_estimation_result__item'>\n<span class=\"car_model_estimation_result_amount\">720€</span>\n<p class='cobalt-text-sectionHeader'>\n<span>maximum estimés par mois</span>\n<span class='cobalt-mb-unit cobalt-Icon cobalt-Icon--size16 cobalt-Icon--colorGraphiteLight'>\n<a class=\"js_popup_trigger\" href=\"#estimate_about_with_open\"><svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n  <path d=\"M11 9h2V7h-2v2zm1 11c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-18C6.477 2 2 6.477 2 12A10 10 0 1 0 12 2zm-1 15h2v-6h-2v6z\" />\n</svg>\n\n</a></span>\n</p>\n\n</div>\n<div class='owner_homepage_hero_estimation_cta__container'>\n<a class=\"owner_homepage_hero_estimation_cta--fullWidth cobalt-Button cobalt-Button--primary cobalt-Button--large js_rent_my_car js_rent_my_car_top js_estimation_result\" rel=\"nofollow\" data-tracking-params=\"{&quot;model_id&quot;:&quot;1519&quot;,&quot;brand_id&quot;:&quot;67&quot;,&quot;mileage&quot;:4,&quot;city&quot;:&quot;Anvers&quot;,&quot;release_year&quot;:2016,&quot;open_eligible&quot;:true,&quot;currency&quot;:&quot;EUR&quot;,&quot;earnings&quot;:720,&quot;earnings_period&quot;:&quot;month&quot;}\" data-click-location=\"top\" data-estimated-earnings=\"{&quot;model_id&quot;:&quot;1519&quot;,&quot;release_year&quot;:2016,&quot;mileage&quot;:4,&quot;within_eligible_area&quot;:true,&quot;open_eligible&quot;:true}\" href=\"/choose_open_or_standard?mileage=4&amp;model_id=1519&amp;open_eligible=true&amp;release_year=2016&amp;within_eligible_area=true\">Inscrire ma voiture</a>\n</div>\n</div>\n</div>\n"}

下面是我提取所需内容的python代码:

代码语言:javascript
复制
import json
from parsel import Selector

with open('C:/Users/coppe/Documents/py trials/estimated_earnings.json') as json_file:  
    earnings = json.load(json_file)
selector = Selector(earnings['html'])
eligibleObj = json.loads(json.dumps(selector.css('a::attr(data-estimated-earnings)').get()))
print(eligibleObj['open_eligible'])

问题是,我得到了这个错误:

代码语言:javascript
复制
print(eligibleObj['open_eligible'])

TypeError: string indices must be integers

有人知道如何将data-estimated-earnings属性中的对象转换为对象,然后提取我需要的东西吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-01 12:33:00

selector.css('a::attr(data-estimated-earnings)').get()返回一个字典,该字典已经以字符串 (json序列化)的形式出现在中,因此必须在其上使用而不是调用json.dumps

从parsel进口选择器导入json >>> = {"html":"\n\n\n>> estimés par mois\n\n\n">http://www.w3.org/2000/svg\">\n \n\n\n\nInscrire”:>>> >>>选择器=选择器(收入‘’html‘) >>>选择器>>> >>> css = selector.css('a::attr(data-estimated-earnings)').get() >>> type,css (,{“model_id”:“1519”,"release_year":2016,“里程数”:4,"within_eligible_area": True,“open_eligible”:True} ) >>> >>> eligible_obj = json.loads(css) >>> eligible_obj {'model_id':'1519','release_year':2016,‘里程’:4,‘’open_css_area‘:True,’open_ >>>‘

翻译成您的代码时,应该是:

代码语言:javascript
复制
eligibleObj = json.loads(selector.css('a::attr(data-estimated-earnings)').get())

,但是我要说,不要在一行中做太多的操作,因为事情可能会变得混乱:)。

票数 3
EN

Stack Overflow用户

发布于 2019-07-01 12:11:17

You eligibleObj是一个string,看起来是这样的:

代码语言:javascript
复制
'{"model_id":"1519","release_year":2016,"mileage":4,"within_eligible_area":true,"open_eligible":true}'

你必须做:

代码语言:javascript
复制
>>> print(json.loads(eligibleObj)['open_eligible'])
True
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56835413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档