2016-05-30 1 views
-1

Ich versuche, eine Zeichenfolge zu teilen und ein JSON-Objekt damit zu erstellen. Aber irgendwie kann ich das Json-Objekt nicht erstellen. Das Json-Objekt "objectBuilder" erhält den Wert nicht. Bitte helfen Sie.Wie teilt man eine Zeichenfolge und erstellen Sie ein JSON-Objekt in Java?

Ich habe Buchnummer wie: "bookNo": "120, 130, 140". Hier könnte bookNo geändert werden und kommt mit 2 Werten oder mehr. Diese Buch Nr. Bekomme ich von der Datenbank. Und ich kann die Json API nicht ändern. Es sollte javax.json api sein.

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(); 
       } 
      } 
    } 

Ausgang wird sein:

{ 
     "bookNumber":"120", 
     "uri":"http://books.google.com/type/120" 
    }, 
    { 
     "bookNumber":"130", 
     "uri":"http://books.google.com/type/130" 
    } 

und so weiter.

+0

Aber irgendwie kann ich das JSON-Objekt nicht erstellen Warum nicht? – Philippe

+0

Ich weiß nicht, was mir hier fehlt. Wenn ich den Wert drucke, druckt er aus, kann aber das Json-Objekt damit nicht erzeugen. – Shimu

+0

erhalten Sie eine Ausnahme als Gegenleistung? – asdfsarandom

Antwort

0

Ich habe hat JsonObjectBuilder zuvor noch nie verwendet, aber es sieht so aus, als ob Sie nie einen Verweis auf das JsonObject speichern, das der Builder in Ihrer Zeile mit .build() erstellt hat. Außerdem fügen Sie dem Builderobjekt immer den gleichen Schlüssel hinzu und überschreiben es jedes Mal. Sie möchten einen ArrayBuilder erstellen und mehrere ObjectBuilder haben:

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); 
+0

Sie können Objekt mit Wert nicht hinzufügen. Es gibt keine Option dafür. – Shimu

+0

Laut den Dokumenten gibt es ... https://docs.oracle.com/javaee/7/api/javax/json/JsonArrayBuilder.html –

0

eine POJO Klasse erstellen mit Attributen bookNumber und uri und überschreiben toString-Methode genau wie:

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 }" ; 
    } 
} 

In Ihrer Klasse eine Instanz von Klasse Buch machen und eine JSONObject erstellen:

Book book = new Book("123214213", "http://www.sth.com"); 
JSONObject jsobject = new JSONObject(book.toString()); 

JSONArray jsonArray = new JSONArray(); 
jsonArray.put(jsobject); 

//..... 
Verwandte Themen