【问题标题】:Changing json values and making new ones更改 json 值并创建新值
【发布时间】:2016-02-11 20:34:39
【问题描述】:

我正在尝试将新数据写入现有 json,但没有成功。这是我当前的 json 文件 dat.dat:

{"users": {"tryhard_cupcake": {"Points": 0, "Time Joined": 9938}}}

以及我是如何解析它的:

def updateUsers(chan):
    j = urllib2.urlopen('http://tmi.twitch.tv/group/user/' + chan + '/chatters')
    j_obj = json.load(j)
    with open('dat.dat', 'r+w') as data_file:
            data = json.load(data_file)
        for dat in data['users']:
            if dat in j_obj['chatters']['moderators']:
                points=data['users'][dat]['Points']
                json.dump(points + 50, data_file)

updateUsers('tryhard_cupcake')

我希望为用户添加 50 分,但它只是在文件末尾附加了 50。输出是这样的:

{"users": {"tryhard_cupcake": {"Points": 0, "Time Joined": 9938}}}
50

如何向用户添加新数据并对其进行修改?我期待这个结果:

{"users": {"tryhard_cupcake": {"Points": 50, "Time Joined": 9938}}}

【问题讨论】:

  • json.dump 所做的只是将您的参数写入data_file。你想要的是用data['users'][dat']['Points']+=50 替换你的实际数据,然后用你的新字典覆盖你的整个 json 文件

标签: python json


【解决方案1】:
  1. 在变量中加载文件的json数据。
  2. 更改变量。
  3. 再次在文件中写入 json 变量。

像这样更改您的updateUsers

def updateUsers(chan):
    j = urllib2.urlopen('http://tmi.twitch.tv/group/user/' + chan + '/chatters')
    j_obj = json.load(j)
    with open('dat.dat') as data_file:
            data = json.load(data_file)
        for dat in data['users']:
            if dat in j_obj['chatters']['moderators']:
                data['users'][dat]['Points'] += 50
    # write to file
    with open('dat.dat', 'w') as out_file:
        json.dump(data, out_file)

【讨论】:

  • 给出一个 ValueError:无法解码 JSON 对象
【解决方案2】:

你可以找到类似的问题here。 使用

            data['users'][dat]['Points']=50

改变点的价值。您正在创建一个新变量 points=data['users'][dat]['Points'] 并更改该变量的值,而不是数据中“点”的值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多