【问题标题】:Read and write JSON values with Python使用 Python 读取和写入 JSON 值
【发布时间】:2020-04-27 17:23:49
【问题描述】:

为了在 json 中存储 api 密钥,我制作了一个带有 sof 帮助的 python 程序,它接受用户的输入。以下代码工作正常并写入 json 文件

import json
k = {}
k['key']='api_key='+ input("enter key")
with open("sample.json", "w") as outfile:
    json.dump(k, outfile, indent=4)
print("success")

输出:(写入文件)

{
"key": "api_key=fdcjlklhkkgjyf8769ljlihhfhdasfdsagf"
}

但在阅读以下代码时,它会垂直输出

import json 

f = open('sample.json',) 
data = json.load(f) 
for i in data['key']: 
    print(i) 
f.close() 

输出:

a
p
i
_
k
e
y
=
f
d
c
j
l
k
l
h
k
k
g
j
y
f
8
7
6
9
l
j
l
i
h
h
f
h
d
a
s
f
d
s
a
g
f

我怎样才能获得正常的输出。我认为有两种方法可以嵌套写入或不使用 for 循环读取。

【问题讨论】:

  • 您正在使用for i in data['key'] 遍历字符串。你可能只想要print(data['key'])
  • data['key']是一个字符串,直接打印就行了,不用循环。
  • data[key] 本身指向字符串。您只是在迭代 data[key]

标签: python json python-3.x dictionary


【解决方案1】:
import json 

f = open('sample.json',) 
data = json.load(f) 
print(data['key'])
f.close() 

data['key'] 本身就是一个字符串。因此,当您循环遍历它时,每次它都会遍历每个字符。

Eg:

a='Nandu'
for i in a:
 print(i)

Output:
N
a
n
d
u

【讨论】:

    【解决方案2】:

    您循环遍历对象 data['key'],但该对象是 JSON 文件中的 string。所以for 循环将打印字符串的每个字符。检查this 了解更多信息。 您必须删除循环并直接访问密钥:

    import json 
    
    f = open('Sample.json',) 
    data = json.load(f) 
    print(data["key"]) 
    f.close() 
    

    或者您将 JSON 中的成员 key 更改为数组:

    {
        "key": [
            "fdcjlklhkkgjyf8769ljlihhfhdasfdsagf"
            ]
    }
    

    两者都会输出密钥:

    $ python Test.py
    fdcjlklhkkgjyf8769ljlihhfhdasfdsagf
    

    所以完整的代码将如下所示(以两个键为例):

    import json
    
    k = {}
    Keys = list()
    
    for i in range(2):
        Keys.append(input("enter key: "))
    
    k['key'] = Keys
    
    with open("sample.json", "w") as outfile:
        json.dump(k, outfile, indent=4)
    print("success")
    

    这会导致:

    {
        "key": [
            "a",
            "c"
        ]
    }
    

    并且可以阅读:

    import json 
    
    f = open('Sample.json') 
    data = json.load(f)
    for Key in data["key"]:
        print(Key) 
    f.close()
    
    $ python Test.py
    a
    c
    

    【讨论】:

    • 谢谢,是的,正如我所说的,有两个是通过删除循环或首先以嵌套方式(数组)写入。但我不能慢慢思考,所以把它放在这里。你也可以请你更新你的答案,将用户输入写成一个数组,这将成为问题的完美答案
    【解决方案3】:

    使用这个

    import json
    k = {}
    k['main']='api_key='+ input("enter key: ")
    with open("sample.json", "w") as outfile:
        json.dump(k, outfile, indent=4)
    print("successfully written")
    
    f = open('sample.json',) 
    data = json.load(f) 
    print(data['main'][8:])
    f.close() 
    

    你会得到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多