【问题标题】:Convert Python dictionary to JSON object without string key将 Python 字典转换为没有字符串键的 JSON 对象
【发布时间】:2020-03-29 22:05:12
【问题描述】:

我创建了一个kaggle Notebook kernel -请检查它- 与世界数据源的国家/地区,以获得处理每个国家及其各自人口的 JSON 对象列表,因为我想要在 JavaScript 中使用它的文本副本。

我使用了以下代码:

data = []

import csv
import json
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        file_name = os.path.join(dirname, filename)
        print(file_name)
        print('Done!')

# Any results you write to the current directory are saved as output.
# LOOK AT THE FOLLOWING Method:
def load_tokens(tokens_file):
    try:
        with open(tokens_file) as csvDataFile:
            csvReader = csv.reader(csvDataFile)

            for i,row in enumerate(csvReader):

                data.insert(i,json.loads(json.dumps({'country':row[0].strip(), 'population':row[2].strip()})))

这里的活动代码是load_tokens() 方法。我结束的是输出print(data),如下所示:

[{'country': 'Country', 'population': 'Population'}, {'country': 'Afghanistan', 'population': '31056997'}, {'country': 'Albania', 'population': '3581655'}, {'country': 'Algeria', 'population': '32930091'},...]

我的问题是字典键。即'country''population' 我不希望它们成为字符串。我需要它们成为 JSON 对象的键,就像在 JavaScript 中找到的那样:

[{country: 'Country', population: 'Population'},{country: 'Afghanistan', population: '31056997'},...

【问题讨论】:

  • 不清楚你想要什么。 {country: 'Country'} 只有在 country 是一个已定义的变量(其值是可散列的)时才被明确定义。为什么你认为{'country': 'Country', ....} 是个问题。
  • “因为我想在 JavaScript 中使用它的文本副本。”所以你正在尝试生成 JavaScript 代码?
  • 打电话给json.loads(json.dumps(...)) 对我来说似乎毫无意义。你想通过将 JSON 加载回 Python 对象来实现什么?
  • @chepner 我认为作为文本 'country' 的键不会作为 JavaScript 中的属性访问。即obj.country 不会循环工作。是的,我尝试生成 JSON 对象的 JavaScript 数组。
  • @Seb 你是对的,但这是试图从文本转换密钥。

标签: javascript python json dictionary


【解决方案1】:

格式良好的 JSON 应该使用字符串作为键,如下所示: {“国家”:“国家”}

您可以在 js 中使用 {country: "Country"} 声明对象这一事实只是一种方便快捷的方式。使用引号声明效果相同,有时效果更好(您的键可以使用 +/- 和其他字符)。

不过,不要从 JSON 转换回 Python 对象(使用 json.loads())。 Python 对象不是 JSON 对象,即使在显示方式上也存在细微差别。

【讨论】:

  • 确实是很好的提示。
猜你喜欢
  • 1970-01-01
  • 2017-04-27
  • 2011-03-16
  • 2010-11-29
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 2022-12-09
相关资源
最近更新 更多