当前位置: 首页 > 面试题库 >

使用JSON保留Python元组

乐正浩博
2023-03-14
问题内容

我对此还有些陌生,因此我可能不知道所有常规术语:

使用JSON编码时是否可以保留Python元组?现在json.loads(json.dumps(tuple))给我一个清单。我不想将元组转换为列表,但是我想使用JSON。那么,有选择吗?

原因:我正在创建一个使用多维数组的应用程序,但并不总是相同的形状。我有一些使用递归来探测数组并将端点转换为字符串或整数的类方法。我最近意识到(基于递归的工作方式)我可以使用元组来防止对数组进行更深入的递归搜索(Python
rawks)。在我确定可以肯定不需要对数据结构进行任何更深入研究的情况下,这可能会派上用场。


问题答案:

您可以编写一个高度专业的编码器和一个解码器挂钩:

import json

class MultiDimensionalArrayEncoder(json.JSONEncoder):
    def encode(self, obj):
        def hint_tuples(item):
            if isinstance(item, tuple):
                return {'__tuple__': True, 'items': item}
            if isinstance(item, list):
                return [hint_tuples(e) for e in item]
            if isinstance(item, dict):
                return {key: hint_tuples(value) for key, value in item.items()}
            else:
                return item

        return super(MultiDimensionalArrayEncoder, self).encode(hint_tuples(obj))

def hinted_tuple_hook(obj):
    if '__tuple__' in obj:
        return tuple(obj['items'])
    else:
        return obj


enc = MultiDimensionalArrayEncoder()
jsonstring =  enc.encode([1, 2, (3, 4), [5, 6, (7, 8)]])

print jsonstring

# [1, 2, {"items": [3, 4], "__tuple__": true}, [5, 6, {"items": [7, 8], "__tuple__": true}]]

print json.loads(jsonstring, object_hook=hinted_tuple_hook)

# [1, 2, (3, 4), [5, 6, (7, 8)]]


 类似资料:
  • 问题内容: 我将RoboSpice与Spring for Android结合使用,并希望使用OrmLite保留对象的JSON数组。GSON用于JSON编组。使用默认缓存,一切都会按预期进行。但是OrmLite似乎不喜欢对象数组。 这是JSON的简化版本: 我想在以下对象中坚持这一点: 基于RoboSpice OrmLite示例,我创建了以下GsonSpringAndroidSpiceService

  • 我是jsoup的新手,在使用非HTML元素(脚本)时遇到了一些困难。我有以下HTML: 用于显示这一点的应用程序知道如何处理 和.语句。因此,当我简单地用jsoup解析文本时,<和>被编码,html被重新组织,所以它不能正确地执行或显示。例如: 我的最终目标是添加一些css和js包含,并修改几个元素属性。那真的不是问题,我已经解决了那么多了。问题是我不知道如何保留非HTML元素,并将格式与原始格式

  • 如果你默认使用Markdown编辑器编辑文档,但是文字中存在一些 Markdown 的保留字。 例如: 表中中出现 | 需要输入 ` 需要成对的出现 [ ] >和<也是需要转义后才能显示。 等等,一些特殊需求。可以通过unicode编码来解决。 将要输入的字符进行转义,之后使用转义字符即可。 常见转义字符: 原字符 转义字符 | | ` ` ] ] [ [ > &gt; < &lt; @ @ #

  • 问题内容: 我注意到JSON对象中元素的顺序不是原始顺序。 JSON列表的元素呢?他们的订单得到维护吗? 问题答案: 是的,JSON数组中元素的顺序得以保留。从RFC 7159开始-JavaScript对象表示法(JSON)数据交换格式 (重点是我的): 对象是零个或多个名称/值对的 无序 集合,其中名称是字符串,值是字符串,数字,布尔值,null,对象或数组。 数组是零个或多个值的 有序 序列。

  • 保留字是 Python 语言中一些已经被赋予特定意义的单词,这就要求开发者在开发程序时,不能用这些保留字作为标识符给变量、函数、类、模板以及其他对象命名。 Python 包含的保留字可以执行如下命令进行查看: >>> import keyword >>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'break',

  • 问题内容: 我正在使用Json-Simple使用JSon-Simple lib编写配置文件,但是在将json字符串转换为map时遇到问题。 调试我发现parse方法返回的对象是Map!但是当我尝试直接投射到LinkedMap时,我得到了ClassCastException: 问题答案: 除非您知道基础对象实际上是LinkedHashMap(或者是扩展LinkedHashMap的类的实例),否则不能