6

我有一个关于我正在构建的 Web 应用程序的问题,我有一个接收 json 字符串的 REST 服务。

Json 字符串类似于:

{
    "string" : "value",
    "string" : "value", 
    "object" : {
                 "string" : "value",
                 "string" : "value",
                 ....
                }
}

我正在使用resteasy来解析下面使用jackson的json字符串。我有一个 jaxb 注释类,我想将“对象”完全解析为一个字符串变量。我想这样做的原因是以后能够使用正确的解析器解析 json(这取决于发送请求的应用程序,因此无法提前知道)。

我的 jaxb 注释类如下所示:

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Test{

@XmlElement(type = String.class)
private String object;

//getter and setter
...
}

当我执行其余调用并让杰克逊解析这段代码时,我得到一个

Can not deserialize instance of java.lang.String out of START_OBJECT token

错误。所以实际上我正在尝试将一段 json 字符串(它是一个 json 对象)解析为一个字符串。我似乎找不到有类似问题的人。

提前感谢您的任何回复。

4

4 回答 4

1

@KwintenP 尝试使用json 智能库

然后,您可以先使用以下方法简单地检索 JSON 对象:

JSONObject test = (JSONObject) JSONValue.parse(yourJSONObject);
String TestString = test.toString();

更重要的是,您可以检索 JSON 对象中的特定对象,可能是另一个对象、数组并将其转换为字符串或以您想要的方式操作。

于 2013-05-31T16:02:49.980 回答
1

如果我理解这个问题,您只需要一种机制,将 Java-Object 转换为 JSON-String,反之亦然。

我也需要这个,而我正在使用传递 JSON 字符串的 WebSocket 客户端-服务器通信。

为此,我使用了 GSON(请参阅GSON)。在那里你可以创建一个完整的 JSON 字符串。这里有一些例子:

// 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;
 }
}
于 2013-05-24T08:19:08.803 回答
0

你也可以做这样的事情;

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
     }

}

于 2013-05-31T14:47:02.277 回答
0
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
...
}
于 2013-03-25T09:40:29.377 回答