Разделить JSON на отдельные схемы и блоки данных - PullRequest
0 голосов
/ 02 июля 2018

Я хочу разбить объект json на две отдельные единицы

  • один держит схему
  • один, содержащий данные или значения (в двоичном сжатом формате).

Редактировать - Почему

У меня есть веб-приложение с json api. Мне нужен след, как protobuf, но цельность, как json. Я думаю, что вся информация, касающаяся объекта, необходимого для таких как protobuf или чего-либо еще, уже находится в объекте json.

Поэтому я хочу во время выполнения сгенерировать схему и данные и отправить только кортеж

(schema_hash, binary_compressed)

на сервер. Если сервер распознает schema_hash, он может преобразовать кортеж во внутренний объект и работать с ним. В противном случае отправитель может просто повторно отправить json, и сервер создаст схему и кеширует ее. Следовательно, вы получаете скорость и простоту.

Он должен работать для всех объектов json, а не только для плоских, как показано ниже.

* ** 1 022 тысяча двадцать-один * Пример
{
    "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 голосов
/ 02 июля 2018

Вы можете рассматривать json как словарь. для итерации вы можете использовать это:

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
0 голосов
/ 02 июля 2018

Это делает трюк?

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...