簡體   English   中英

將json對象解析為字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM