在Python中通过JSON分配变量

时间:2018-11-30 04:34:02

标签: json python-3.x nested

上周,我搜索了数十个答案,但未能找到我要尝试做的事的例子,很高兴指出我想念的事情,而我我是Python的新手,所以如果这很琐碎,我深表歉意。

我正在尝试从JSON文件中读取配置,以便可以从脚本本身中提取配置。

我希望能够将配置值分配给变量并对其执行操作,然后再转到嵌套列表中的下一个类别,该类别的类别可以随时间变化/扩展(音乐,图片,等等)。

JSON文件(library.json)当前如下所示:

{"media":{
    "tv": [{
        "source": "/tmp/tv",
        "dest": "/tmp/dest"
        }],
    "movies": [{
        "source": "/tmp/movies",
        "dest": "/tmp/dest"
    }]
}}

相关脚本如下:

import json
with open(libfile) as data_file:
data = json.load(data_file)

for k, v in (data['media']['tv']):
    print (k, v)

我希望看到的输出是:

dest /tmp/dest
source /tmp/tv 

我看到的是:

dest source

感觉好像我缺少一些简单的东西。

3 个答案:

答案 0 :(得分:1)

这有效,

import json
with open('data.json') as json_file:
  data = json.load(json_file)
  for p in data['media']['tv']:
      dst = (p['dest'])
      src = (p['source'])
      print (src, dst)

答案 1 :(得分:0)

像这样?使用f-stringszip()会聚合元素。

import json
with open("dummy.json") as data_file:
    data = json.load(data_file)

for i, j in data["media"].items():
    print(i)
    print("\n".join(f'{str(k)} {str(l)}' for k,l in list(zip(j[0].keys(), j[0].values()))))
    print("\n")

输出:

tv
source /tmp/tv
dest /tmp/dest


movies
source /tmp/movies
dest /tmp/dest

答案 2 :(得分:0)

这里的问题是data['media']['tv']实际上是词典的列表

您可以看到它,因为它看起来像这样:"movies": [{..(请注意括号[

这意味着代替此:

for k, v in (data['media']['tv']):
    print (k, v)

您应该这样做:

for dct in (data['media']['tv']):
    for k, v in dct.items():
        print(k, v)