Android: 使用jackson逐个解析JSON对象

3

我想在我的安卓应用中从数据库中获取数据。为此,我使用了一个PHP Web服务和JSON格式的数据。当我向Web服务请求数据时,我会得到类似这样的内容:

{"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数据库,读取下一个产品,将其写入数据库,依此类推。
我已经看到了这个示例,但如果我使用它,我必须使用产品列表。所以我的问题是,如何逐个读取这个jsonarray的产品?
提前感谢。
1个回答

3

如果有人需要,这是我解决问题的方法,从这里学到。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接