【问题标题】:How do i edit this invalid json and parse load it in python [closed]我如何编辑这个无效的json并在python中解析加载它[关闭]
【发布时间】:2018-12-11 14:18:14
【问题描述】:

jsonCallback1530150433250_46028 && jsonCallback1530150433250_46028({"context":"synthesis%3Ddisabled%26q%3D%2523all%2Bcard_content_lang%253Aen%2B%2B%2B%2Bcard_content_type%253A%2522%253A%2522%253A%252%28 2529%2B%26b%3D0%26s%3Ddesc%2528score_with_card_update_timestamp%2529%26output_format%3Djson%26callback%3

  • 以上是我想从下面的完整链接解析的 json 的部分示例。

  • 主要问题是我无法从网络中提取它,因为它是无效的。我以前使用 json.loads() 但结构发生了变化。如何将整个 json 数据转换为具有不同库或其他任何内容的字符串以进行编辑?

  • 感谢您的帮助

这里是完整 json 的链接: https://apisearch.3ds.com/card_search_api?q=%23all%20card_content_lang%3Aen%20%20%20%20card_content_type%3A(%22career%22)%20&s=desc(score_with_card_update_timestamp)&b=0&hf=10&output_format=json&callback=jsonCallback1530150433250_46028

我暂时无法发布图片,但这里是一个类比:

link = 'https://apisearch.3ds.com/card_search_api?q=%23all%20card_content_lang%3Aen%20%20%20%20card_content_type%3A(%22career%22)%20&s=desc(score_with_card_update_timestamp)&b=0&hf=10&output_format=json&callback=jsonCallback1530150433250_46028'   
response = requests.get(link)       
time.sleep(random.randint(3,5) 
json_obj = json.loads(response.text)
print json_obj

这给了我,*ValueError: No JSON object could be decoded*

【问题讨论】:

标签: python json scrape


【解决方案1】:

我不会在这里复制你的整个 JSON 数据,但这里是要点。

x = "jsonCallback1530150433250_46028 && jsonCallback1530150433250_46028({the_json_data_you_want}"

我将在第一个“(”处拆分,因为你想要它之后的所有内容:

a = x.split('(', 1)
reqJson = a[1]
print(reqJson)

这将为您提供所需的 JSON。现在你可以这样做了:

import json 
json_data = json.loads(reqJson) 

然后继续进行您想要实现的任何目标。

PS:请以可读的格式编辑您的问题,以便其他人也可以帮助您,如果您需要进一步的帮助。

【讨论】:

  • 感谢您这么快联系我们!我现在完全理解了这个概念,谢谢,但只是在“a = x.split('(', 1)”的一部分。我如何将 x 加载到 python 中,因为它是无效的。我尝试了不同的库来解析json 无效,但我不确定如何将其转换为您所展示的字符串格式。
  • 目前,我将手动将整个数据复制到我的代码中。除非有更简单的方法可以直接从链接加载它们。
  • 这个链接应该可以帮助你加载一个 JSON 文件并将其作为字符串读取,然后你就可以使用我的解决方案了。
  • 天哪,这个链接真的很有帮助。我从来不知道 json.dump 可以帮助生成有效的 json 字符串。太感谢了。这就是答案!
【解决方案2】:

你可能需要做的是截断匹配的字符串,直到你找到一个'{' 这样做:

# split the json string with '{' as separator:
va1='jhdgfhsgdf&&sdkfhskjdfh({sdfhsj({})dfhsj})'
v1=va1.split('{')

# now delete the first element of the array
del v1[0]

# now join rest of the elements of the array to get proper json string
'{'.join(v1)

【讨论】:

  • 感谢您的快速回复。这完全有效,问题是我如何从上面的链接中获取 json 数据并将其加载到你所拥有的字符串中。任何库或方法?再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2012-05-01
  • 2021-06-13
  • 2022-01-06
相关资源
最近更新 更多