【问题标题】:Android: using jackson to parse JSON object by objectAndroid:使用jackson逐个对象解析JSON对象
【发布时间】:2012-08-09 16:52:27
【问题描述】:

我想在我的 android 应用程序中访问数据库中的数据。为此,我使用了 PHP 网络服务和 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 对此无能为力。所以我想使用杰克逊流式 json 解析器。我无法在我的应用程序中保留产品列表,因为这会消耗大量内存。所以我想做的是从json中读取一个产品,将其写入我的android SQLite数据库,读取下一个产品,将其写入数据库等等。

我看过这个example,但如果我使用它,我必须使用产品列表。所以我的问题是,如何逐个产品地读取这个 jsonarray?

提前致谢。

【问题讨论】:

    标签: android json jackson arrays


    【解决方案1】:

    如果有人需要这个,这是我从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
    

    【讨论】:

      猜你喜欢
      • 2016-12-02
      • 2014-12-22
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 1970-01-01
      相关资源
      最近更新 更多