Десериализация JSON - PullRequest
       10

Десериализация JSON

0 голосов
/ 24 августа 2011

Я преобразовал Java-объект со строкой и связанным хэш-картой в JSON, используя GSON.toJson. Результатом этого процесса является комбинация пар ключ: значение и массива, как показано ниже:

{"a":"b", "c":"d", "featuremap":{"e":"f", "g":"h"}}

Не могли бы вы посоветовать, как я могу десериализовать это в строку, содержащую ТОЛЬКО пары ключ: значение, т. Е. Массив featuremap разрешен так, чтобы вывод был:

{"a":"b", "c":"d", "e":"f", "g":"h"}

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Это зависит: всегда ли это будет объект, подобный

var objToFlatten = {
    "a": "b",
    "c": "d",
    "featuremap": {
        "e": "f",
        "g": "h"
    }
}

Или это может быть несколько вложенных, с несколькими объектами, чтобы сгладить? Например:

var objToFlatten = {
    "a": "b",
    "c": "d",
    "featuremap": {
        "e": "f",
        "g": "h"
    },
    "someothermap": {
        "e": "f",
        "g": "h",
        "nestedmap": {
            "i": "j"
        }
    }
}

Первый - простой, но хакерский.

function copyFromObject(other) {
    for (var propertyName in other) {
        if (propertyName == 'featureMap') continue;
        if (other.hasOwnProperty(propertyName)) {
            this[propertyName] = other[propertyName];
        }
    }
    return this;
}
var flattened = copyFromObject.call({}, objToFlatten);

Последний будет чище и потребует рекурсивного решения. Также вам нужно выяснить, что вы хотите делать с такими вещами, как дублированные записи. Что если у вас есть два свойства в двух вложенных объектах с одинаковыми именами?

1 голос
/ 25 августа 2011

Посмотрите на GSON док. Вы можете написать свой собственный сериализатор / десериализатор для определенного типа

https://sites.google.com/site/gson/gson-user-guide#TOC-Writing-a-Deserializer

Как написать собственный десериализатор JSON для Gson?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...