Java 将json对象解析为字符串
我有一个关于我正在构建的web应用程序的问题,其中我有一个REST服务接收json字符串 Json字符串类似于:Java 将json对象解析为字符串,java,json,jaxb,jackson,resteasy,Java,Json,Jaxb,Jackson,Resteasy,我有一个关于我正在构建的web应用程序的问题,其中我有一个REST服务接收json字符串 Json字符串类似于: { "string" : "value", "string" : "value", "object" : { "string" : "value", "string" : "value", .... } } 我使用reste
{
"string" : "value",
"string" : "value",
"object" : {
"string" : "value",
"string" : "value",
....
}
}
我使用resteasy解析json字符串,该字符串下面使用jackson。我有一个jaxb注释类,我想将“object”完全解析为一个字符串变量。我之所以要这样做,是为了能够在以后使用正确的解析器解析json(这取决于发送请求的应用程序,因此不可能提前知道)
我的jaxb注释类如下所示:
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Test{
@XmlElement(type = String.class)
private String object;
//getter and setter
...
}
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;
}
}
当我执行rest调用并让jackson解析代码时,我得到一个
Can not deserialize instance of java.lang.String out of START_OBJECT token
错误。所以实际上我正试图将一段json字符串,也就是json对象,解析成一个字符串。我似乎找不到有类似问题的人
提前感谢您的回复
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
...
}
如果我理解这个问题,您只需要一个机制,它将Java对象转换为JSON字符串,反之亦然 我在使用WebSocket客户机-服务器通信时也需要它,其中传递了JSON字符串 为此,我使用了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);
}
您需要的是,您的类属性设置器和JSON属性名称是等效的
{
"info":[
{
"name": "Adam",
"address": "Park Street"
}
]
}
您的类应该如下所示:
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Test{
@XmlElement(type = String.class)
private String object;
//getter and setter
...
}
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;
}
}
你也可以这样做
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
}
}@KwintenP尝试使用
然后,您只需首先使用以下命令检索JSON对象:
JSONObject test = (JSONObject) JSONValue.parse(yourJSONObject);
String TestString = test.toString();
此外,您还可以检索JSON对象中的特定对象,可以是另一个对象、数组,并将其转换为字符串或按您所需的方式进行操作。它必须是字符串吗?因为您使用的是Jackson,我建议将您的对象存储为。这应该可以反序列化,之后您可以使用正确的语法分析器。根据我的分析师的说法,应该是:)。不管怎样,我都会尝试,如果成功的话,我会说服他。