我尝试拆分字符串并用它创建一个json对象。但不知怎的,我无法创建json对象。 Json对象" objectBuilder"没有得到价值。请帮忙。
我的书号如:" bookNo":" 120,130,140"。这里bookNo可以更改,并附带2个或更多值。这些书号,我从数据库中获取。我无法改变Json API。它应该是javax.json api。
for(BookTerm dataTable:list){
URL url1 = new URL("http://books.google.com/type/");
JsonObjectBuilder objectBuilder = Json.createObjectBuilder();
String uriAdd = dataTable.getBookNo().toString();
String[] uriLink = uriAdd.split(", ");
int i = 0;
String uriLink1 = null;
if(uriLink != null){
while (i< uriLink.length){
uriLink1 = uriLink[i];
URL url2 = new URL(url1.getProtocol(), url1.getHost(), url1.getPort(), url1.getPath() + uriLink1, null);
uriAdd1 = url2.toString();
i++;
objectBuilder.add("bookNumber", uriLink1)
.add("uri", uriAdd1).build();
}
}
}
输出将是:
{
"bookNumber":"120",
"uri":"http://books.google.com/type/120"
},
{
"bookNumber":"130",
"uri":"http://books.google.com/type/130"
}
等等。
答案 0 :(得分:0)
创建一个包含属性bookNumber
和uri
的POJO类,并覆盖toString方法,如下所示:
public class Book{
private String bookNumber;
private String uri;
//define a constructor with parameters
public Book(String bookNumber, String uri){
this.bookNumber = bookNumber;
this.uri=uri;
}
// define getters setters
// public String getBooknumber(..) etc.
@Override
public String toString(){
return "obj{bookNumber:" + "\"" + this.bookNumber + "\"" +", uri:"+ "\"" + this.uri }" ;
}
}
在你的类中创建一个Book类的实例并创建一个JSONObject:
Book book = new Book("123214213", "http://www.sth.com");
JSONObject jsobject = new JSONObject(book.toString());
JSONArray jsonArray = new JSONArray();
jsonArray.put(jsobject);
//.....
答案 1 :(得分:0)
我之前从未使用过JsonObjectBuilder,但看起来你永远不会保存对构建器在.build()行上创建的JsonObject的引用。此外,您不断向构建器的对象添加相同的密钥,每次只需覆盖它。您想要创建一个ArrayBuilder并在其中包含多个ObjectBuilder,如下所示:
JsonBuilderFactory factory = Json.createBuilderFactory();
JsonObject value = factory.createArrayBuilder();
while(haveObjects) {
value.add(Json.createObjectBuilder().add("bookNumber", uriLink1).add("uri", uriAdd1).build());
}
// writer will be constructed with some sort of output, and this will write the JSON value to it.
JsonWriter writer = Json.createWriter();
writer.write(value);