Python 列表生成式解析json

一段有道翻译返回结果的json数据如下(翻译的是《Game of Thrones》):

{
  "translateResult": [
    [
      {
        "tgt": "我们应该往回走,”盖瑞催促着,周围的树林开始变暗。",
        "src": "We should start back,” Gared urged as the woods began to grow dark around them. "
      },
      {
        "tgt": "“野人”已经死了。",
        "src": "“The wildlings are dead.”"
      }
    ],
    [
      {
        "tgt": "“死人吓着你了吗?”",
        "src": "“Do the dead frighten you?"
      },
      {
        "tgt": "威玛·罗伊斯爵士微笑着问道。",
        "src": "” Ser Waymar Royce asked with just the hint of a smile."
      }
    ],
    [
      {
        "tgt": "盖瑞没有上钩。",
        "src": "Gared did not rise to the bait. "
      },
      {
        "tgt": "他是个五十多岁的老人,他曾见过贵族们来来去去。",
        "src": "He was an old man, past fifty, and he had seen the lordlings come and go. "
      },
      {
        "tgt": "“死就是死,”他说。",
        "src": "“Dead is dead,” he said. "
      },
      {
        "tgt": "“我们和死人没有关系。”",
        "src": "“We have no business with the dead.”"
      }
    ],
    [
      {
        "tgt": "“他们死了吗?",
        "src": "“Are they dead?"
      },
      {
        "tgt": "”罗伊斯轻声问道。",
        "src": "” Royce asked softly. "
      },
      {
        "tgt": "“我们证明什么?”",
        "src": "“What proof have we?”"
      }
    ]
  ],
  "errorCode": 0,
  "type": "en2zh-CHS"
}

我是整段翻译,需要将所有翻译结果整合成一个字符串,但是这个json稍微有些复杂,数组里面套数组。

来把它一层一层的拆开,先拆第一层:

import json

if __name__ == '__main__':
    json_str = None
    with open('json.json', encoding='utf-8') as f:
        json_str = f.read()
    json = json.loads(json_str)
    for items in json['translateResult']:
        print(items)

# 输出结果:
[{'tgt': '我们应该往回走,”盖瑞催促着,周围的树林开始变暗。', 'src': 'We should start back,” Gared urged as the woods began to grow dark around them. '}, {'tgt': '“野人”已经死了。', 'src': '“The wildlings are dead.”'}]
[{'tgt': '“死人吓着你了吗?”', 'src': '“Do the dead frighten you?'}, {'tgt': '威玛·罗伊斯爵士微笑着问道。', 'src': '” Ser Waymar Royce asked with just the hint of a smile.'}]
[{'tgt': '盖瑞没有上钩。', 'src': 'Gared did not rise to the bait. '}, {'tgt': '他是个五十多岁的老人,他曾见过贵族们来来去去。', 'src': 'He was an old man, past fifty, and he had seen the lordlings come and go. '}, {'tgt': '“死就是死,”他说。', 'src': '“Dead is dead,” he said. '}, {'tgt': '“我们和死人没有关系。”', 'src': '“We have no business with the dead.”'}]
[{'tgt': '“他们死了吗?', 'src': '“Are they dead?'}, {'tgt': '”罗伊斯轻声问道。', 'src': '” Royce asked softly. '}, {'tgt': '“我们证明什么?”', 'src': '“What proof have we?”'}]

每个数组里里面又有不止一条数据,再来个循环,把数组中的数据也提取出来:

    for items in json['translateResult']:
        for item in items:
            print(item['tgt'])
# 输出结果:
我们应该往回走,”盖瑞催促着,周围的树林开始变暗。
“野人”已经死了。
“死人吓着你了吗?”
威玛·罗伊斯爵士微笑着问道。
盖瑞没有上钩。
他是个五十多岁的老人,他曾见过贵族们来来去去。
“死就是死,”他说。
“我们和死人没有关系。”
“他们死了吗?
”罗伊斯轻声问道。
“我们证明什么?”

已经OK了,现在用列表生成式一步搞定吧(我刚知道列表生成式可以用双重循环):

    trans_list=[item['tgt'] for items in json['translateResult'] for item in items]
    print(trans_list)
# 输出结果:
['我们应该往回走,”盖瑞催促着,周围的树林开始变暗。', '“野人”已经死了。', '“死人吓着你了吗?”', '威玛·罗伊斯爵士微笑着问道。', '盖瑞没有上钩。', '他是个五十多岁的老人,他曾见过贵族们来来去去。', '“死就是死,”他说。', '“我们和死人没有关系。”', '“他们死了吗?', '”罗伊斯轻声问道。', '“我们证明什么?”']

再把list合并成一个字符串吧:

    trans_str = ''.join(trans_list)
    print(trans_str)
# 输出结果:
我们应该往回走,”盖瑞催促着,周围的树林开始变暗。“野人”已经死了。“死人吓着你了吗?”威玛·罗伊斯爵士微笑着问道。盖瑞没有上钩。他是个五十多岁的老人,他曾见过贵族们来来去去。“死就是死,”他说。“我们和死人没有关系。”“他们死了吗?”罗伊斯轻声问道。“我们证明什么?”

最终代码:

import json

if __name__ == '__main__':
    json_str = None
    with open('json.json', encoding='utf-8') as f:
        json_str = f.read()
    json = json.loads(json_str)
    # for items in json['translateResult']:
    #     for item in items:
    #         print(item['tgt'])
    trans_list = [item['tgt'] for items in json['translateResult'] for item in items]
    # print(trans_list)
    trans_str = ''.join(trans_list)
    print(trans_str)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,961评论 3 119
  • 她,是一个普通的不能再普通的女人,却常常吸引着我的注意力; 她,是大楼里众多清洁工中的一名,负责我们这一层的打扫;...
    怿溦阅读 206评论 0 0
  • 美国戴尔电脑公司总裁麦克·戴尔曾说:"创业没有准则。"那么就创业而言,也没有哪一种固定的模式可以保证我们一劳永逸地...
    涛新一步阅读 198评论 0 0
  • 4月16日 祈祷: 美好的早晨,请引领着我!今天无论我做什么都会做的很好!爱拥抱着我,环绕着我,我的内心平安坦荡!...
    闪光的种子阅读 107评论 0 1