2015-07-06 2 views
3

У меня есть JSon строка:Синтаксического JSON в строку в Gson

{ 
    "id":123, 
    "name":"", 
    "details":{} 
} 

Я хочу, чтобы разобрать к этому объекту:

class Student { 

int id; 
String name; 
String details; 

} 

Это ошибка, я получаю:

java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx.xxx/xxx.xxx.MainActivity}: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected STRING but was BEGIN_OBJECT 

Причина, по которой я хочу детализировать как строку не как JsonObject, потому что я использую объект Realm DB и сохраняю это в базе данных. Как я могу сказать Gson, что я хочу, чтобы строка details являлась строкой.

+0

Ваш «json» на самом деле не JSON - имена полей не в кавычках. Это должно быть '{" id ": 123," name ":" "," details ": {}}'. Это может быть все, что неправильно. Это поможет, если вы покажете короткую, но полную программу, демонстрирующую проблему, заметьте ... –

+1

Вы можете взять объект JSON и преобразовать его в JSON String перед сохранением в БД, если вы задаете вопрос только по «деталям» ". –

+0

'" details ": {}' несовместим с 'String details;' (это то, о чем говорит вам ошибка. Он ожидает String, но находит Object и bam.) – njzk2

ответ

0

Я не нашел хороший способ его решить, но в настоящее время я копирую объект json и строгу его на переменную, удаляю его из элемента json, а затем вызываю gson fromJson.

1

Значение details, {}, является объектом не строки. Это не будет интерпретироваться как строка, если не процитировать это так:

{ 
"id":123, 
"name":"", 
"details":"{}" 
} 

GSON говорит вам «Expected STRING but was BEGIN_OBJECT». Это имеет смысл, потому что вы даете ему подпись типа с атрибутом String с именем details, но ваша сериализация имеет атрибут с именем details, который содержит пустой объект.

+0

Спасибо, моя вина. Это просто пример, не хотел делиться внутренними деталями. Я исправлю пример. – Jimmy

+0

Хорошо. Затем я добавлю детали, чтобы помочь с реальной проблемой. – kdbanman

+0

@Jimmy: при размещении вопроса, ввода сообщений и кода, которые фактически демонстрируют проблему. – njzk2

Смежные вопросы