如何在Python中使用JSONDecoder?仅获取内部字典进行解码

2024-03-03

我有一个 JSONEncoder 和 JSONDecoder:

class SimpleTargetJSONEncoder(json.JSONEncoder):
    """
    converts a SimpleTarget to a Dict so it can be JSONified
    """

    def default(self, o):
        if isinstance(o, SimpleTargetItem):
            return {
                'x': o.x(),
                'y': o.y(),
                'status': o.status,
                'imageSet': o.imageSet}


class SimpleTargetJSONDecoder(json.JSONDecoder):
    def __init__(self):
        json.JSONDecoder.__init__(self, object_hook=self.dict_to_object)

    def dict_to_object(self, d):
        t = SimpleTargetItem(imageSet=d['imageSet'])
        t.setX(d['x'])
        t.setY(d['y'])
        return t

编码器写出如下文件:

[
    {
        "y": 2514.0, 
        "x": 2399.0, 
        "status": "default", 
        "imageSet": {
            "default": ":/images/blue-circle.png", 
            "active": ":/images/green-circle.png", 
            "removed": ":/images/black-circle.png", 
        }
    }, 
    {
        "y": 2360.0, 
        "x": 2404.0, 
        "status": "default", 
        "imageSet": {
            "default": ":/images/blue-square.png", 
            "active": ":/images/green-square.png", 
            "removed": ":/images/black-square.png", 
        }
    }
]

但是当我调用解码器时,我得到:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python /Users/dmd/Documents/inmotion/py/targetlayoutdesigner/designer.py
Traceback (most recent call last):
  File "/Users/dmd/Documents/inmotion/py/targetlayoutdesigner/targetlayoutwindow.py", line 131, in loadLayout
    for t in SimpleTargetJSONDecoder().decode(open(fname).read()):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
  File "/Users/dmd/Documents/inmotion/py/targetlayoutdesigner/targetitem.py", line 113, in dict_to_object
    t = SimpleTargetItem(imageSet=d['imageSet'])
KeyError: 'imageSet'

如果我此时查看 d,就会发现 d 就是这样:

{u'active': u':/images/green-circle.png',
 u'default': u':/images/blue-circle.png',
 u'removed': u':/images/black-circle.png'}

即内部字典。

我究竟做错了什么?


你假设你只会得到你想要的字典,而不是all dicts.

class SimpleTargetJSONDecoder(json.JSONDecoder):
    def __init__(self):
        json.JSONDecoder.__init__(self, object_hook=self.dict_to_object)

    def dict_to_object(self, d):
        if 'x' not in d or 'y' not in d:
            return d
        t = SimpleTargetItem(imageSet=d['imageSet'])
        t.setX(d['x'])
        t.setY(d['y'])
        return t
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中使用JSONDecoder?仅获取内部字典进行解码 的相关文章

随机推荐

  • 为什么我的简单严格 XHTML 文件在包含 jquery 时会出错?

    我正在尝试制作一个包含 jquery 的简单严格的 HTML 文件
  • 使用 Qt Quick 创建可扩展的光泽按钮

    我想使用 Qt Quick 创建下面的光泽按钮 最好使用纯 QML 无 C 它需要可扩展 所以我不能使用PNG等 到目前为止我的代码 import QtQuick 2 3 import QtQuick Controls 1 2 import
  • 如何在 tmux 中使用 Ctrl-分号作为前缀?

    我想使用 Ctrl 分号作为 tmux 的前缀 但我的conf不起作用 unbind key C b set option g prefix C 我发现了一篇类似的文章 但这不是前缀 tmux 绑定分号 https stackoverflo
  • 使用 Automapper 忽略子类映射中的基类属性的问题

    我有一个场景 我想忽略基类中定义的类的某些属性 我有一个像这样的初始映射 Mapper CreateMap
  • C++:((A*)nullptr)->foo();合法吗?

    在深入研究 MFC 时 我发现了这段代码 AFXWIN INLINE HWND CWnd GetSafeHwnd const return this NULL NULL m hWnd 好像是这样使用的 CWnd pWnd nullptr p
  • 向左旋转 verilog 大小写

    我的任务是用verilog编写一个16位ALU 当我做需要旋转操作数和进行2的补码加法和减法的部分时 我发现了困难 我知道如何用纸和铅笔解决这个问题 但我无法弄清楚如何在 Verilog 中做到这一点 例如 A表示为a15 a14 a13
  • 字符串和标签本地化和全球化的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是一个拥有 20 多名开发人员的团队的成员 每个开发人员都在一个单独的模块上工作 大约 10 个模块 在每个模块中 我们可能至少有 50 个
  • 如何安装依赖于另一个“目标项目”包的包?

    我在设置 yeoman 时遇到问题 当我尝试安装某些软件包 yeoman compass 时 我不断收到此错误 同时 其他软件包安装良好 git python 外部包不能依赖于目标项目的包 我不确定失败在哪里 但是 nuget 有一个长期存
  • 测试本地时清单中的代码库属性不匹配

    根据 Java 1 7u25 你应该添加Codebase归因于你的清单 我已经做到了 但现在我无法在本地测试它 因为属性值与我的本地 JNLP 由 Netbeans 生成 不匹配 它没有代码库值 清单的代码库应该有什么价值和 或我的 jnl
  • 反应式香蕉节流事件

    我想在reactive banana 中实现某种类型的事件限制 它应该工作 以便如果距最后一个事件通过的时间少于 delta 秒 则不会让事件通过 如果不让其通过 则会存储该事件 并在距离上次触发事件 delta 秒后触发 下面是一个为时间
  • 需要一种算法来像素化 n 维超球面

    我想将向量放入 n 维空间中 这可以通过对 n 维超球面的表面进行像素化来完成 有谁知道用 C 语言对超球面进行像素化有什么好的算法吗 我想要恒定的垃圾箱大小 我的空间仅由正整数组成 您需要您的垃圾箱完全规则吗 如果不是 则随机抛出点 并测
  • 按因子列安全合并数据框

    因子可以帮助防止 R 中的某些编程错误 您无法对使用不同级别的因子执行相等检查 并且在对无序因子执行大于 小于检查时会收到警告 a lt factor letters 1 3 b lt factor letters 1 3 levels l
  • Doctrine 2.0 select查询问题?

    我的朋友 我是 DOctrine 2 0 的新手 我已经配置了 但它不起作用 我有一张桌子 abctable 在数据库中 xyzdb id name age 1 Abc 23 2 Ijk 21 3 Mno 32 Table name abc
  • Visual Studio 装饰扩展事件未被触发

    我正在尝试为我的视觉工作室插件创建一个基本的装饰功能 我已经有一个工具窗口和一些命令设置 我正在尝试让 adronment 工作 按照此走过 https msdn microsoft com en us library ee818135 a
  • Django 1.9 import_module 的导入错误

    当尝试运行任一runserver or shell using manage py我得到一个ImportError例外 我正在使用 Django 1 9 ImportError No module named django utils im
  • Android安装-sdk manager.exe不起作用

    我从developer android com安装了适用于Windows的android SDK installer r08 windows exe 我安装到默认位置 C Program Files Android android sdk
  • Java Spring Boot 的 Docker 基础镜像(`FROM`)是什么?

    什么 Docker 基础镜像 FROM 对于 Java Spring Boot 应用程序 我刚刚开始使用 docker 我看到了FROM inside Dockerfile可以为Java定义图像 例如 FROM java 8 如果我使用 G
  • 405 不允许的方法

    我试图访问https api box com 2 0 files但我收到Expected status code in 200 299 got 405在我的回复中 来自 AFNetworking 在发送请求之前 我已从服务器获取了我的 au
  • Spring Security Oauth2 AuthenticationSuccessEvent 在每个请求时发布

    我正在使用 Spring Security Oauth2 来保护我的 Spring Boot REST 应用程序 我想在用户登录成功和失败后处理一些操作 问题是每个 当我使用用户不记名令牌发送请求时 AuthenticationSucces
  • 如何在Python中使用JSONDecoder?仅获取内部字典进行解码

    我有一个 JSONEncoder 和 JSONDecoder class SimpleTargetJSONEncoder json JSONEncoder converts a SimpleTarget to a Dict so it ca