2017-03-23 5 views
0

Ich extrahiere einige Daten von einer http-Site und jetzt möchte ich dies mit JSON formatieren. Ich sah einige Beispiele, aber ich verstehe nicht, wie man das genau wollen .I etwas wie folgt aus:Struktur JSOUP Inhalt zu JSON

{ 
    Product name:"Samsung..." 
    { review 1:"..." 
     review 2:"..." 
    } 
} 

Auch mein Code nicht alle Bewertungen durchlaufen, ist es auf Seite 1 stoppt, und es gibt 10 mehr Seiten und ich möchte mindestens 20-30 Bewertungen erhalten. Es ist das, was ich tat, bis jetzt:

import java.io.IOException; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class JsoupMain { 

private static int nr = 1; 

public static void main(String[] args) { 

    Document document = null; 
    try { 
     document = Jsoup.connect("http://www.emag.ro/telefon-mobil-samsung- galaxy-j5-2016-dual-sim-16gb-4g-gold-sm-j510fzdurom/pd/DQD3B7BBM/").get(); 

     String title = document.title(); 
     System.out.println("Title: " + title); 

     Elements review = document.select("div.product-review-body"); 

     for (Element rev : review) { 
      System.out.println("Review : " + nr + " :" + rev.text() + "\n"); 
      nr++; 
     } 

    } catch (IOException e) { 

     e.printStackTrace(); 
    } 

} 

} 

Antwort

0

diese Antwort für eine ähnliche Frage Siehe - Parsing table html with Jsoup In Ihrem Fall es könnte wie folgt aussehen:

JSONObject root = new JSONObject(); 
    JSONArray reviews = new JSONArray(); 
    root.put("name", "Product Name"); 
    for (int i=0; i < elements.size(); i++){ 
     JSONObject review = new JSONObject(); 
     review.put("review"+i , elements.get(i).text()); 
     reviews.add(review); 
    } 
    root.put("reviews", reviews); 

Der JSON-Ausgang für root würde wie folgt aussehen:

{ 
    "name":"Product Name", 
    "reviews":[ 
     { 
     "review0":"ok" 
     }, 
     { 
     "review1":"awesome" 
     } 
    ] 
} 
+0

Die Methode hinzufügen ist nicht für JSONArray definiert, das ist was Eclipse sagen –

+0

Welche Version von 'Json-Lib' verwenden Sie? Der obige Code basierte auf dieser Abhängigkeit - "net.sf.json-lib: json-lib: 2.4: jdk15". – VinPro

+0

Ich löste das Problem in dieser Zeit, aber es zeigt immer noch keine Informationen wie ich will. Ich meine Bewertungen sind eins unter einander. Ich werde dir meinen Code zuweisen ... aber ich weiß nicht, welche Verios der JSON-Bibliothek ich verwende und um ehrlich zu sein, weiß ich nicht, wo man das findet –

0

ich möchte diesen Code machen, genau zeigen Informationen wie folgt aus:

{ Reviews: 
    { review 1: "..."} 
    { review 2: "..."} 
    ................ 
    ................ 
} 

In der Gegenwart druckt mein Code Informationen wie das: "Bewertungen": [[{"Review 0": "Foarte mulmit Un Telefon foarte brötchen. Ce ma impresionat este Kamera foto Pflege Gesicht niste poze foarte bune "}, {" R ............}

import java.io.IOException; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class JsoupMain { 

private static int nr = 1; 

public static void main(String[] args) { 

    Document document = null; 
    try { 
     document = Jsoup.connect("http://www.emag.ro/telefon-mobil-samsung-galaxy-j5-2016-dual-sim-16gb-4g-gold-sm-j510fzdurom/pd/DQD3B7BBM/").get(); 

     String title = document.title(); 
     System.out.println("Product name : " + title); 

     Elements review = document.select("div.product-review-body"); 

     JSONObject mainObject = new JSONObject(); 
     JSONObject root = new JSONObject(); 
     JSONArray list = new JSONArray(); 
     root.put("Product name", title); 
     for (int i = 0; i < review.size(); i++) { 
      JSONObject revieww = new JSONObject(); 
      revieww.put("Review " + i, review.get(i).text()); 
      list.put(revieww); 

     } 

     mainObject.accumulate("Reviews", list); 
     System.out.println(mainObject); 

    } catch (IOException e) { 

     e.printStackTrace(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

}

0

Ersetzen Sie Ihren Code Elements review = document.select("div.product-review-body");...-... System.out.println(mainObject); mit dem folgenden Code-Snippet.

  Elements review = document.select("div[class=product-review-body]"); 
      JSONObject parent = new JSONObject(); 
      parent.put("Product name", title); 
      JSONArray reviews = new JSONArray(); 
      int i = 1; 
      for (Element rev : review) { 
       reviews.put(new JSONObject().put("review" + i, rev.text())); 
       i++; 
      } 
      parent.put("Reviews", reviews); 
      System.out.println(parent); 

Hoffe, das hilft.