Python 的 json.loads 的数据输入必须是啥格式?

Posted

技术标签:

【中文标题】Python 的 json.loads 的数据输入必须是啥格式?【英文标题】:What format does data input have to be for Python's json.loads?Python 的 json.loads 的数据输入必须是什么格式? 【发布时间】:2016-06-09 23:40:38 【问题描述】:

我正在尝试使用 json.loads 解析 Redshift 数据库表中的数据。我已经删除了在 Python 脚本中进行测试的函数,并且无法理解正在发生的事情。

我使用的代码是:

import json
j="'['Bars', 'American (Traditional)', 'Nightlife', 'Restaurants']'"

def trythis(item, reverse):
    if not j:
        return '1'
    try:
         arr = json.loads(j)
    except ValueError:
        return '2'
    if not ascending:
        arr = sorted(arr, reverse=True)
    else:
        arr = sorted(arr)
    return json.dumps(arr)

print trythis(j, True)

这是返回2

我尝试将输入变量更改为j="['Bars', 'American (Traditional)', 'Nightlife', 'Restaurants']",但没有奏效。我的输入值需要是什么格式?

【问题讨论】:

啊,谢谢。您是否建议使用 str.replace 之类的东西将内部单引号替换为双引号? 我只想将您对单引号的使用切换为双引号。阅读您的代码的任何人都不会感到困惑。 您不应该尝试手动创建 JSON,有许多细节您不太可能正确。使用从数据结构创建 JSON 的库函数,例如 json.dumps() 你的单引号列表是从哪里来的? 来自 Yelp 的数据集。 【参考方案1】:

您的输入字符串 j 不是有效的 JSON。 JSON 不允许使用单引号 (') 来表示字符串值。

尝试切换引号:'["Bars", "American (Traditional)", "Nightlife", "Restaurants"]'

JSON 规范是确定您的输入是否为有效 JSON 的绝佳资源。你可以在这里找到它:http://www.json.org/

【讨论】:

谢谢。数据实际上不是 JSON 格式,但在使用该函数之前,我能够在 SQL 端将单引号替换为双引号。不是最好的方法,但我需要的只是可行的方法。

以上是关于Python 的 json.loads 的数据输入必须是啥格式?的主要内容,如果未能解决你的问题,请参考以下文章

python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)

python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)

python json.load和json.loads的区别

python中json.dumps()和json.dump() 以及 json.loads()和json.load()的区分

python json dumps与loads有可能犯的错误

python——json.loads避坑