当前位置: 首页 > 面试题库 >

将“ true”(JSON)转换为等效于Python的“ True”

葛言
2023-03-14
问题内容

我最近使用的Train status API(has_arrived, has_departed)在JSON对象中添加了两个额外的键值对,这导致我的脚本崩溃。

这是字典:

{
"response_code": 200,
  "train_number": "12229",
  "position": "at Source",
  "route": [
    {
      "no": 1,
      "has_arrived": false,
      "has_departed": false,
      "scharr": "Source",
      "scharr_date": "15 Nov 2015",
      "actarr_date": "15 Nov 2015",
      "station": "LKO",
      "actdep": "22:15",
      "schdep": "22:15",
      "actarr": "00:00",
      "distance": "0",
      "day": 0
    },
    {
      "actdep": "23:40",
      "scharr": "23:38",
      "schdep": "23:40",
      "actarr": "23:38",
      "no": 2,
      "has_departed": false,
      "scharr_date": "15 Nov 2015",
      "has_arrived": false,
      "station": "HRI",
      "distance": "101",
      "actarr_date": "15 Nov 2015",
      "day": 0
    }
  ]
}

毫不奇怪,我得到了以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'false' is not defined

如果我没记错的话,我认为这是因为JSON响应中的布尔值是false/,true而Python可以识别False/
True。有什么办法解决吗?

PS:我尝试将的JSON响应转换has_arrived为字符串,然后将其转换回布尔值,结果发现True如果字符串中有任何字符,我总会得到一个值。我有点卡在这里。


问题答案:

尽管Python的对象声明语法与Json语法非常相似,但它们是截然不同且不兼容的。除True/true问题外,还有其他问题(例如,Json和Python处理日期的方式非常不同,而python允许单引号和注释,而Json不允许)。

解决方案不是尝试将它们视为同一事物,而是根据需要将它们从一个转换为另一个。

Python的json库可用于解析(读取)字符串中的Json并将其转换为python对象…

data_from_api = '{"response_code": 200, ...}'  # data_from_api should be a string containing your json
info = json.loads(data_from_api)
# info is now a python dictionary (or list as appropriate) representing your Json

您也可以将python对象转换为json …

info_as_json = json.dumps(info)

例:

# Import the json library
import json

# Get the Json data from the question into a variable...
data_from_api = """{
"response_code": 200,
  "train_number": "12229",
  "position": "at Source",
  "route": [
    {
      "no": 1, "has_arrived": false, "has_departed": false,
      "scharr": "Source",
      "scharr_date": "15 Nov 2015", "actarr_date": "15 Nov 2015",
      "station": "LKO", "actdep": "22:15", "schdep": "22:15",
      "actarr": "00:00", "distance": "0", "day": 0
    },
    {
      "actdep": "23:40", "scharr": "23:38", "schdep": "23:40",
      "actarr": "23:38", "no": 2, "has_departed": false,
      "scharr_date": "15 Nov 2015", "has_arrived": false,
      "station": "HRI", "distance": "101",
      "actarr_date": "15 Nov 2015", "day": 0
    }
  ]
}"""

# Convert that data into a python object...
info = json.loads(data_from_api)
print(info)

第二个示例显示True / true转换是如何发生的。还请注意对引号的更改以及如何删除注释…

info = {'foo': True,  # Some insightful comment here
        'bar': 'Some string'}

# Print a condensed representation of the object
print(json.dumps(info))

> {"bar": "Some string", "foo": true}

# Or print a formatted version which is more human readable but uses more bytes
print(json.dumps(info, indent=2))

> {
>   "bar": "Some string",
>   "foo": true
> }


 类似资料:
  • 问题内容: 我正在尝试从Web服务器读取.json文件。 我从服务器接收到的JSON在http://jsonlint.com/上报告无效: 它显示以下测试结果: 在使用PHP解析之前,如何将其转换为VALID JSON? 问题答案: 所有键(preOpen,preClose等)都必须是字符串,因此它们需要用双引号引起来。 ===更新=== 如果您的Json-String无效,则可以使用以下脚本对其

  • 问题内容: 我让jQuery提取一些textarea内容并将其插入li中。 我希望它在视觉上保留换行符。 必须有一种非常简单的方法来执行此操作… 问题答案:

  • 问题内容: 我是否可以使用Java 将转换为中的等效值。 我当然可以用一个大的声明来做到这一点,但是如果可能的话,我想避免这样做。 鉴于此文档: http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html 我不太希望没有ifs或case语句就可以做到这一点。 问题答案: 希望您认识到,它不同于Java 1.

  • 问题内容: 我第一次使用curl命令: 我想在Java Servlet中发送此命令,并从响应中获取一个JSON对象以进行解析,最好的解决方案是什么? HttpURLConnection? Apache httpclient? 我尝试了几种不同的解决方案,但到目前为止没有任何效果,我可以找到的大多数示例都使用了已贬值的DefaultHttpClient 这是我的尝试之一的示例: 编辑 我已经修改了代

  • 我有包含非法字符的json 我想要从服务器spring发送到客户端的明文,这样客户端就可以获得完整的数据。 如何将字符串的非法字符替换为有效的json对象?

  • 问题内容: 我有一个无效的json字符串,如下所示, 我尝试使用JSON.parse将其转换为对象。但是,这不是有效的json字符串。是否有任何函数可以将这种无效格式转换为有效的json字符串或直接转换为对象? 问题答案: 如果您的示例语法与真实JSON相同,则JSONLint表示您需要对名称和值使用双引号。 仅在这种情况下,请使用以下替换调用: 但是,您首先应该尝试使用有效的Json。