Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串转换为对象时出现问题_Python_Json - Fatal编程技术网

Python 将字符串转换为对象时出现问题

Python 将字符串转换为对象时出现问题,python,json,Python,Json,我有一个json文件,我想从该文件中从a元素中提取数据估计收益属性。该属性包含一个对象,我想从中提取open\u键值 以下是开始的JSON: {"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__i

我有一个json文件,我想从该文件中从
a
元素中提取
数据估计收益
属性。该属性包含一个对象,我想从中提取
open\u
键值

以下是开始的JSON:

{"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"}
问题是我遇到了以下错误:

print(eligibleObj['open_eligible'])

TypeError: string indices must be integers

是否有人知道如何将
数据估计收益
属性中的对象转换为对象,然后提取我需要的内容

You
eligibleObj
是一个
字符串
,看起来像:

“{”车型id:“1519”,“发布年份”:2016,“里程数”:4,“符合条件区域内”:真,“开放符合条件”:真}”
你必须做到:

打印(json.loads(eligibleObj)['open\u-qualified'] 真的
selector.css('a::attr(数据估计收益)')).get()
返回一个已为字符串形式的字典(json序列化),因此您必须调用
json.dumps

导入json >>>从parsel导入选择器 >>> > = {“html”:“\n\n720欧元\ n<p类=‘钴文本分割席标题’>nMax极大值\n\n\p/\\n\n\n\n\n\n\n} >>> >>>选择器=选择器(收益['html']) >>>选择器 >>> >>>css=selector.css('a::attr(数据估计收益)')).get() >>>类型(css),css (,“{”车型id:“1519”,“发布年份”:2016,“里程数”:4,“符合条件的区域内”:真,“符合条件的开放”:真}”) >>> >>>符合条件的_obj=json.loads(css) >>>符合条件的 {'model_id':'1519','release_year':2016,'里程数':4,'符合条件的地区内':True,'符合条件的开放':True} >>>合格的对象[开放的合格的] 真的
翻译成您的代码后,应该是:

eligibleObj=json.loads(selector.css('a::attr(数据估计收益)')).get()
,但我要说的是,不要在一行中执行太多操作,因为事情可能会变得混乱:)。

为什么其中有一个
json.dumps
json.loads(json.dumps(a))
首先与
a
相同。您对
eligibleObj['open\u Qualified']
的期望值是多少?“类型错误:字符串索引必须是整数”。你从哪里知道它是一个列表?事实上,听起来像
str[1,5]
str[“test”]
错误。现在修正了,谢谢你的评论。
print(eligibleObj['open_eligible'])

TypeError: string indices must be integers