我必须将下面嵌套的Json数组的数据解析到我的应用程序中。我很困惑如何从中获取价值。
{
"prodCat_list": [
{
"prods": [
{
"cat_id": "9",
"position": "1",
"sku": "wwww345"
},
{
"cat_id": "9",
"position": "2",
"sku": "coof23"
},
{
"cat_id": "9",
"position": "3",
"sku": "dde45"
},
{
"cat_id": "9",
"position": "4",
"sku": "5555"
}
]
},
{
"prods": [
{
"cat_id": "9",
"position": "1",
"sku": "wwww345"
},
{
"cat_id": "9",
"position": "2",
"sku": "coof23"
},
{
"cat_id": "9",
"position": "3",
"sku": "dde45"
},
{
"cat_id": "9",
"position": "4",
"sku": "5555"
}
]
},
]
}
任何人都可以指导我如何从中获取内部价值。
我试过这个
JSONParser parser = new JSONParser();
JSONObject items = parser.getJSONFromUrl(productInfoUrl);
try {
JSONArray itemsDetails = items.getJSONArray("prodCat_list");
if(itemsDetails.length()>0){
for (int i = 0; i < itemsDetails.length(); i++) {
JSONArray productWithCategories = itemsDetails.getJSONArray(i);
JSONObject object = productWithCategories.getJSONObject(i);
Product productInfo = new Product( object.getString("sku"), object.getInt("cat_id"), object.getInt("position"));
ProductDbHandler productDbHandler = new ProductDbHandler(context);
productDbHandler.addProducts(productInfo);
}
}
else
System.out.println("No product to add");
} catch (JSONException e) {
e.printStackTrace();
}
}
答案 0 :(得分:21)
以下是我认为你的JSON Parser应该是这样的(可能会有一些拼写错误,我没有在编辑器上测试这段代码:)):
JSONObject mainObj = new JSONOBject(myString);
if(mainObj != null){
JSONArray list = mainObj.getJSONArray("prodCat_list");
if(list != null){
for(int i = 0; i < list.length();i++){
JSONObject elem = list.getJSONObject(i);
if(elem != null){
JSONArray prods = elem.getJSONArray("prods");
if(prods != null){
for(int j = 0; j < prods.length();j++){
JSONObject innerElem = prods.getJSONObject(j);
if(innerElem != null){
int cat_id = innerELem.getInt("cat_id");
int pos = innerElem.getInt("position");
String sku = innerElem.getString("sku");
}
}
}
}
}
}
}
答案 1 :(得分:1)
尝试使用
org.json.simple.JSONValue
代码:
import org.json.simple.JSONValue;
String content = "{...}";
JSONValue.parse(content);
答案 2 :(得分:1)
您可以使用GSon库。它将json解析为您可以访问的各种对象。 虚拟代码在这里:
` GSon gSon = new GSon();
ProdCatList prodCatList = gSon.fromJson(---inputStreamReader of your JSon data---,ProdCatList.class);`
答案 3 :(得分:1)
试试这个!
//Write your own implementation of json parser
JSONParser jParser = new JSONParser();
JSONArray prod_cat = new JSONArray();
JSONArray products = new JSONArray();
JSONObject json = jParser.getJSONFromUrl("your source");
prod_cat = json.getJSONArray("prodCat_list");
for (int i = 0; i < prod_cat.length(); i++) {
JSONObject object = prod_cat.getJSONObject(i);
products = object.getJSONArray("products");
}
答案 4 :(得分:0)
JSONObject reader = new JSONObject(results);
JSONArray VendorProductsList = reader.getJSONArray("VendorProductsList");
for (int i = 0; i < VendorProductsList.length(); i++) {
ebay=new Ebay();
JSONObject elem = VendorProductsList.getJSONObject(i);
JSONArray Products = elem.getJSONArray("Products");
for (int j = 0; j < Products.length(); j++) {
JSONObject innerElem = Products.getJSONObject(j);
//JSONObject ProductName=Products.getJSONObject(j);
ebay.setProductName(innerElem.getString("ProductName"));
gallery_array.add(ebay);
答案 5 :(得分:0)
只需用Gson自动解析它:
JSONParser parser = new JSONParser();
JSONObject items = parser.getJSONFromUrl(productInfoUrl);
Gson gson = new GsonBuilder().create();
ProdCatResponse prodCatResponse = gson.fromJson(items.toString(), ProdCatResponse.class);
但实际上你可以用字符串形式解析JSON响应。您无需在JSONObject
中获取回复并使用toString()
。
JSONParser parser = new JSONParser();
String items = parser.getFromUrl(productInfoUrl);
Gson gson = new GsonBuilder().create();
ProdCatResponse prodCatResponse = gson.fromJson(items, ProdCatResponse.class);
有关Gson的更多信息:https://guides.codepath.com/android/Leveraging-the-Gson-Library
这是模型类示例,您可以使用http://www.jsonschema2pojo.org生成它。
ProdCatResponse.java
public class ProdCatResponse {
private List <Prod> prods = new ArrayList <Prod> ();
public List <Prod> getProds() {
return prods;
}
public void setProds(List < Prod > prods) {
this.prods = prods;
}
}
Prod.java
public class Prod {
private String catId;
private String position;
private String sku;
public String getCatId() {
return catId;
}
public void setCatId(String catId) {
this.catId = catId;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public String getSku() {
return sku;
}
public void setSku(String sku) {
this.sku = sku;
}
}