开发者社区> 问答> 正文

如何在JSON中的dict中打印字符串列表

您好我尝试打印dll_loaded列表

"behavior": {
    "generic": [
        {
            "process_path": "C:\\Windows\\System32\\wscript.exe", 
            "summary": {
                "dll_loaded": [
                    "C:\\Windows\\system32\\wshext.dll", 
                    "C:\\Windows\\system32\\advapi32.dll", 
                ]
             }
         }

但是它总是给我这个错误TypeError:字符串索引必须是整数

我尝试使用以下方法打印

        for sys in json_data["behavior"]["generic"]:
            for sys1 in sys["summary"]:
                for sys2 in sys1["dll_loaded"]:
                    print(sys2)

我尝试打印sys1的类型,它给了我<<class'str'>`,不应该是列表吗?然后尝试将sys1视为字符串,并使用range和len进行打印,但这只会返回一个字符!

但是我不确定我要去哪里错了,有人可以帮忙吗?我正在使用Python 3.7

编辑 我尝试了John P的答案,它起作用了,但是现在我遇到了另一个问题,例如dll_loaded不是列表中的第一个元素

"behavior": {
    "generic": [
        {
            "process_path": "C:\\Windows\\System32\\wscript.exe", 
            "summary": {
                "file_created": [
                    "C:\\Users\\Administrator\\AppData\\Roaming\\WinRAR\\version.dat"
                ], 
                "file_recreated": [
                    "\\Device\\DfsClient"
                ], 
                "directory_created": [
                    "C:\\Users\\Administrator\\AppData\\Roaming\\WinRAR"
                ], 
                "dll_loaded": [
                    "C:\\Windows\\system32\\wshext.dll", 
                    "C:\\Windows\\system32\\advapi32.dll", 
                ]
             }
         }

抱歉,我仍然是Python的初学者

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 21:35:58 611 0
2 条回答
写回答
取消 提交回答
  • 有点尴尬唉 你要寻找的东西已经被吃掉啦!

    for sys in json_data["behavior"]["generic"]: for sys1 in sys["summary"]: for sys2 in sys["summary"][sys1]: print(sys2)

    2020-03-25 22:26:47
    赞同 展开评论 打赏
  • 我认为您正在寻找的是这样的:

    for sys in json_data["behavior"]["generic"][0]["summary"]['dll_loaded']:
        print(sys)
    

    不需要3层for循环,因为您仅对从json_data [“ behavior”] [“ generic”] [0] [“ summary”] ['dll_loaded']`生成的列表感兴趣。

    关于您的问题,为什么sys1的类型是<class'str'>,这是因为sys [“ summary”]给出一个单元素的字典而不是列表。如果在sys [“ summary”]中的sys1使用的情况下遍历字典,则sys1引用字典中的键,在这种情况下,仅引用字符串“ dll_loaded”

    如果您坚持要嵌套for循环(不建议使用),那么正确的人是这样的:

    for sys in json_data["behavior"]["generic"]:
       for sys1 in sys["summary"]:
          for sys2 in sys["summary"][sys1]:
             print(sys2)
    

    回答来源:stackoverflow

    2020-03-24 21:36:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载