У меня есть следующий объект:GSON удалось выполнить синтаксический анализ JSON шпагатом пространства
public class ParameterWrapper<T> {
private String type;
private T value;
public ParameterWrapper(String type, T value) {
this.type = type;
this.value = value;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
Я сериализации в JSON с помощью библиотеки Gson. Когда value
содержит строку без пробелов, она отлично работает. Когда value
содержит строку с пробелами, я вижу следующее исключение:
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: незавершенная объект в строке 1 колонки 28
Для следующего JSON:
{"Plaintext":{"type":"String","value":"hello there"},"Key":{"type":"Number","value":"1"},"SINGLE_FUNCTION":{"value":"1-0"}}
Однако со следующим:
{"Plaintext":{"type":"String","value":"hellothere"},"Key":{"type":"Number","value":"1"},"SINGLE_FUNCTION":{"value":"1-0"}}
JSON успешно разбирается. Это известная проблема? Я запускал JSON через валидатор, и все в порядке.
Edit:
Нечеткость вопроса не осталось незамеченным. Я надеялся, что это уже проблема. Приложение огромно, вот почему вытащить небольшой, компилируемый пример сложно, но я сделаю все, что в моих силах!
OKAY. Таким образом, во-первых, ниже JSON будет отправить на мой контроллер:
@RequestMapping("/update-state")
public
@ResponseBody
String updateState(@RequestParam(value = "algorithmId") String algorithmId,
@RequestParam(value = "state") String state) throws InvalidParameterException {
Algorithm algorithm = algorithmService.getAlgorithmById(Integer.parseInt(algorithmId));
algorithm.execute(executorService.parseAlgorithmState(state));
return gsonBuilder.toJson(algorithm.getState().getParameterMap());
}
На призыв к parseAlgorithmState(state)
, она движется вниз к этому методу:
@Override
public AlgorithmState parseAlgorithmState(String json) throws InvalidParameterException {
Gson gson = new Gson();
Map keyValueMap = (Map) gson.fromJson(json.trim(), Object.class);
...
Линия Map keyValueMap = (Map) gson.fromJson(json.trim(), Object.class);
где исключение первоначально происходит.
Не могли бы вы показать, как вы сериализуете/десериализуете данные? Этот вопрос кажется странным. Я создал небольшую программу на основе вашего проблемного ввода, и она отлично работает. Вы можете проверить его там: https://gist.github.com/alexcrt/d898d5780cf5da4b0bbd Проводка кода, который воспроизводит ошибку, поможет ... –
Я добавил маршрут через код. Спасибо за внимание @AlexisC. – christopher
Трудно воспроизвести. Попробуйте напечатать то, что исходит из вашей функции «updateState», но снова основано на вашем вводе. «KeyValueMap» содержит '{Plaintext = {type = String, value = hello there}, Key = {type = Number, value = 1}, SINGLE_FUNCTION = {значение = 1-0}} 'в конце (я только что сделал« Map KeyValueMap = (Карта) новый Gson(). fromJson (gson.toJson (o), Object.class); ').Честно говоря, я не думаю, что это проблема с Gson (иначе это было бы очень смущающей ошибкой), но с тем, как вы манипулируете своими данными, или со странными непечатаемыми персонажами (кто знает?). –