2012-08-09 51 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