解析JSON我有以下對象:GSON失敗,串空間
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;
}
}
我使用GSON庫序列化成JSON。當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,它非常好。
編輯:
問題的模糊性並未被忽視。我希望這是一個存在的問題。該應用程序是巨大的,這就是爲什麼要找出一個小的,可編輯的例子很困難,但我會盡我所能!
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發佈重現錯誤的代碼將有助於... – 2015-04-03 19:45:17
我已通過代碼添加路由。感謝您的關注@AlexisC。 – christopher 2015-04-03 20:13:55
很難重現。嘗試打印來自'updateState'函數的內容,但是基於你的輸入,'keyValueMap'包含'{Plaintext = {type = String,value = hello there},Key = {type = Number,value = 1},SINGLE_FUNCTION (我剛剛完成Map Map keyValueMap =(Map)new Gson()。fromJson(gson.toJson(o),Object.class);''){} = {value = 1-0}說實話,我不認爲它與GSON的問題(否則它會是一個非常尷尬的錯誤),但你的方式處理你的數據,或者用奇怪的非打印字符(誰知道?)。 – 2015-04-03 20:20:51