[英]Parsing json object into a string
我有一個關於正在構建的Web應用程序的問題,我有一個REST服務接收json字符串。
Json字符串類似於:
{
"string" : "value",
"string" : "value",
"object" : {
"string" : "value",
"string" : "value",
....
}
}
我正在使用resteasy解析在下面使用傑克遜的json字符串。 我有一個帶有jaxb注釋的類,我想將“對象”完全解析為一個String變量。 我想要這樣做的原因是以后可以使用正確的解析器解析json(這取決於發送請求的應用程序,因此無法提前知道)。
我的jaxb注釋類如下所示:
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Test{
@XmlElement(type = String.class)
private String object;
//getter and setter
...
}
當我執行rest調用並讓jackson解析此代碼時,我得到一個
Can not deserialize instance of java.lang.String out of START_OBJECT token
錯誤。 所以實際上我正在嘗試將一個json字符串(這是一個json對象)解析為一個String。 我似乎找不到類似問題的人。
預先感謝您的任何回復。
如果我理解此問題,那么您只需要一種機制,即可將Java對象轉換為JSON-String或其他方式。
在使用WebSocket客戶端-服務器通信(其中傳遞了JSON字符串)時,我也需要它。
為此,我使用了GSON(請參閱GSON )。 在那里,您可以創建一個完整的JSON-String。 這里有一些例子:
// Converts a object into a JSON-String
public String convertMyClassObjectToJsonFormat() {
MyClass myObject = new MyClass();
Gson gson = new Gson();
return gson.toJson(myObject);
}
//Converts a JSON-String into a Java-Class-Object
public MyClass convertJsonToMyClassObject(
CharBuffer jsonMessage) {
Gson gson = new Gson();
return gson.fromJson(jsonMessage.toString(),
MyClass.class);
}
您需要的是,您的Class-Attributes-setter和JSON-Attribute-names是等效的。 例如
{
"info":[
{
"name": "Adam",
"address": "Park Street"
}
]
}
您的班級應如下所示:
public class Info{
private String name;
private String address;
public void setName(String name){
this.name = name;
}
public void setAddress(String address){
this.address = address;
}
}
@KwintenP嘗試使用json智能庫 。
然后,您可以簡單地首先使用以下方法檢索JSON對象:
JSONObject test = (JSONObject) JSONValue.parse(yourJSONObject);
String TestString = test.toString();
此外,您可以在JSON對象中檢索特定對象(可能是另一個對象,數組),然后將其轉換為String或以所需的方式進行操作。
java.lang.String out of START_OBJECT token
這意味着"object"
后的預期字符為引號"
,而不是方括號{
。
預期的json
"object" : "my object"
實際的json
"object" : { ...
=======
如果您想像示例中那樣解析json,請更改您的類。 例如
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Test{
@XmlElement
private InnerTest object;
//getter and setter
...
}
@XmlAccessorType(XmlAccessType.PROPERTY)
public class InnerTest{
@XmlElement
private String string;
//getter and setter
...
}
您也可以這樣做;
public class LeaderboardView
{
@NotEmpty
@JsonProperty
private String appId;
@NotEmpty
@JsonProperty
private String userId;
@JsonProperty
private String name = "";
@JsonProperty
private String imagePath = "";
@NotEmpty
@JsonIgnore
private String rank = "";
@NotEmpty
@JsonProperty
private String score;
public LeaderboardView()
{
// Jackson deserialization
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.