将json拆分为单独的架构和数据单元

时间:2018-07-01 22:43:39

标签: python json compression schema

我想将json对象分为两个单独的单元

  • 持有架构的人
  • 一个保存数据或值的文件(二进制压缩格式)。

编辑-为什么

我有一个带有json API的网络应用。我想要像protobuf这样的足迹,但想要像json这样的无缝性。我认为有关protobuf或其他所需对象的所有信息已经在json对象中。

因此,我想在运行时生成架构和数据并仅发送元组

(schema_hash, binary_compressed)

到服务器。如果服务器识别到schema_hash,则可以将元组转换为内部对象并对其进行处理。否则,发送方可以仅重新发送json,服务器将创建架构并对其进行缓存。因此,您可以获得protobuf的速度和json的便捷性。

它必须适用于所有json对象,而不仅仅是下面的平面。

示例

{
    "variable_a": 1,
    "variable_b": 2
}

使用python genson我可以生成:

{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
    "variable_a": {
        "type": "integer"
    },
    "variable_b": {
        "type": "integer"
    }
},
"required": [
    "variable_a",
    "variable_b"
]

如何生成数据部分

在这种情况下,只能是两个整数,总共占2 * 32位空间

2 个答案:

答案 0 :(得分:1)

这有用吗?

obj = {
    "variable_a": 1,
    "variable_b": 2
}
# Get the values in the dictionary
vals = obj.values()
# Store the values as bytes
vals_as_bytes = bytearray(vals)
# Write the bytes to a binary file
with open("filename", "wb") as file:
    file.write(vals_as_bytes)

答案 1 :(得分:1)

您可以将json视为Dictionary。要对其进行迭代,可以使用以下方法:

dic  = {
    "variable_a": 1,
    "variable_b": 2
}

要对其进行迭代,请使用以下代码:

for key in dic:
    print(key, '-->', dic[key])

但是,如果您有多个数据记录作为json,则可以将其保存在dataframe对象中,前提是所有json对象中的属性都相同:

columns = []
for key in dic:
    columns.append(key)

import pandas as pd
df = pd.DataFrame(columns=columns)

df.loc[len(df)]  = dic