2012-08-09 96 views
3

我想訪問我的android應用程序中的數據庫中的數據。爲此,我使用PHP web服務和JSON格式的數據。當我問web服務的數據,我得到這樣的事情:Android:使用傑克遜解析JSON對象的對象

{"products": 
    [ 
    {"product":["prod_id_1","prod_name_1","prod_barcode_1","prod_brand_1","prod_wrapper_1","12.00000"]}, 
    {"product":["prod_id_2","prod_name_2","prod_barcode_2","prod_brand_2","prod_wrapper_2","24.00000"]} 
    ] 
} 

但與1000 +產品。顯然,jsonObject和jsonArray對此沒有幫助。所以我想使用Jackson流式json解析器。我無法在我的應用中保留產品列表,因爲這會消耗大量內存。所以我想要做的是從JSON中讀取一個產品,在我的android SQLite數據庫中寫入,讀取下一個產品,將其寫入數據庫等等。

我見過這個example但是如果我使用這個,我不得不使用產品列表。所以我的問題是,我怎樣才能讀取這個按產品分類的jsonarray?

在此先感謝。

回答

3

如果有人需要這個,下面是我如何解決它,從here瞭解到。

JsonFactory f = new JsonFactory(); 
JsonParser jp = f.createJsonParser(httpclient.execute(httppost, responseHandler)); 

jp.nextToken(); 

while(jp.nextToken()!=JsonToken.END_OBJECT){ 
    jp.nextToken(); 
    while (jp.nextToken()!=JsonToken.END_ARRAY){ 
     jp.nextToken(); 
     while(jp.nextToken()!=JsonToken.END_OBJECT){ 
       String fieldname = jp.getCurrentName(); 

       while (jp.nextToken()!=JsonToken.END_ARRAY){        
         produto p_json = new produto(); //produto is my product class 
         p_json.id = Integer.parseInt(jp.getText()); 
        jp.nextToken(); 
        p_json.name = jp.getText(); 
        jp.nextToken(); 

        p_json.cod_barras = jp.getText(); //product barcode 
        jp.nextToken(); 
        p_json.marca = jp.getText(); //product brand 
        jp.nextToken(); 

        String formato = jp.getText(); //product wrapper 
        jp.nextToken(); 
        p_json.formato = formato+"["+jp.getText()+"]"; //formatting as required by my database, as wrapper+"["+number+"]" 

        //The following line writes the product in the database... 
        bd.addProduto(p_json); 
        } 
       } 
      } 
    } 

    jp.close(); // ensure resources get cleaned up timely and 
          // properly