Android:使用jackson按对象解析JSON对象

时间:2012-08-09 16:52:28

标签: android json jackson arrays

我想在Android应用中访问数据库中的数据。为此,我使用的是PHP Web服务和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,逐个产品?

提前致谢。

1 个答案:

答案 0 :(得分: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