2017-04-11 4 views
1

Ich habe ein jsonArray mit einer Reihe von jsonObjects, die ich über die market_id so gruppieren möchte, dass Objekte mit ähnlichen market_id's in ihrer eigenen Liste oder Array getrennt gehalten werden. Wie kann ich das erreichen?Gruppierung von jsonObjects in einem jsonArray Android

[ 
{ 
    "product_id": "12301", 
    "selection": "No", 
    "sales": "31", 
    "market_id": "10", 
}, 
{ 
    "product_id": "12302", 
    "selection": "No", 
    "sales": "24", 
    "market_id": "43", 
}, 
{ 
    "product_id": "12303", 
    "selection": "Yes", 
    "sales": "121", 
    "market_id": "10", 
}, 
{ 
    "product_id": "12304", 
    "selection": "No", 
    "sales": "0", 
    "market_id": "43", 
}, 
{ 
    "product_id": "12305", 
    "selection": "Yes", 
    "sales": "20", 
    "market_id": "43", 
}, 

]

Um so etwas zu erreichen:

[{ 
    "product_id": "12304", 
    "selection": "No", 
    "sales": "0", 
    "market_id": "43", 
}, 
{ 
    "product_id": "12305", 
    "selection": "Yes", 
    "sales": "20", 
    "market_id": "43", 
}, 
{ 
    "product_id": "12302", 
    "selection": "No", 
    "sales": "24", 
    "market_id": "43", 
},] 
+0

Ich glaube, Sie id zuerst nach, dass der Check sollten Sie JSON-Array mit ähnlichen id –

+0

machen, was Sie bisher versucht haben? Zeigen Sie Ihren Code. –

+0

@Bmbariah Wenn Sie nach market_id gruppieren, was ist mit Ihrer Produkt-ID? Sieht aus, dass Ihre Produkt-ID in JSON für jede Markt-ID unterschiedlich ist. –

Antwort

0

ich einfach durch jedes Objekt in der jsonArray Schleife beendet und Hinzufügen von Objekten, die ähnliche market_id die in ihre eigenen jsonArray teilen. Es ist nicht schön, aber es funktioniert.

try { 

     JSONArray jsonArray = new JSONArray(mainjson); 

     for (int i = 0; i < jsonArray.length(); i++) { 

      JSONObject jsonObject = jsonArray.getJSONObject(i); 

      String market_id = jsonObject.getString("market_id"); 

      if (market_id.equalsIgnoreCase("43")) { 

       JSONObject json = new JSONObject(); 
       json.put("match_id", jsonObject.getString("product_id")); 
       json.put("selection", jsonObject.getString("selection")); 
       json.put("sales", jsonObject.getString("sales")); 
       json.put("market_id", jsonObject.getString("market_id")); 
       new_json.put(json); 

      } else if (market_id.equalsIgnoreCase("10")) { 
       .... 
+0

Warten Sie eine Minute, ich werde Ihnen eine elegante Lösung – AlexTa

+0

Vielen Dank! Lass mich testen. – Bmbariah

+0

Lass es mich wissen, wenn es funktioniert, habe ich getestet und scheint, dass es perfekt funktioniert – AlexTa

1

zuerst ein Produkt Modell Klasse erstellen, die so Komparator-Schnittstelle implementiert ermöglicht es Ihnen, Produktliste zu sortieren, in diesem Fall von marketId.

Product.java

public class Product implements Comparator<Product> { 
public String productId; 
public String selection; 
public String sales; 
public String marketId; 

public Product() { 
    super(); 
} 

@Override 
public int compare(final Product p1, final Product p2) { 
    if (!TextUtils.isEmpty(p1.marketId) && !TextUtils.isEmpty(p2.marketId)) { 
     return p1.marketId.compareTo(p2.marketId); //Ascending order 
    } 
    return 0; 
} 
} 

Zweitens ein Produkt Parser Klasse erstellen, die Ihre Produktliste JSONArray nach Produkttyp Liste analysiert und von Produkttyp Liste gruppiert Produkt JSONArray.

ProductParser.java

public class ProductParser { 
private static final String TAG = ProductParser.class.getSimpleName(); 
private static final String PRODUCT_ID = "product_id"; 
private static final String SELECTION = "selection"; 
private static final String SALES = "sales"; 
private static final String MARKET_ID = "market_id"; 
private static final String HELPER_ID = "-1"; 

public ProductParser() { 
    super(); 
} 

public List<Product> parseProductArrayToProductList(final JSONArray productArray) { 
    final List<Product> productsList = new ArrayList<>(); 
    if (null != productArray) { 
     try { 
      final int productCount = productArray.length(); 
      for (int i = 0; i < productCount; ++i) { 
       final JSONObject productJson = productArray.getJSONObject(i); 
       final Product product = new Product(); 
       product.productId = productJson.getString(PRODUCT_ID); 
       product.selection = productJson.getString(SELECTION); 
       product.sales = productJson.getString(SALES); 
       product.marketId = productJson.getString(MARKET_ID); 
       productsList.add(product); 
      } 
     } catch (final JSONException e) { 
      Log.e(TAG, e.toString()); 
     } 
    } 
    return productsList; 
} 

public JSONArray parseProductListToGroupedProductArray(final List<Product> productList) { 
    final JSONArray groupedProductArray = new JSONArray(); 
    if (null != productList && !productList.isEmpty()) { 
     final int productCount = productList.size(); 
     String currentMarketId = HELPER_ID; 
     JSONArray productArray = null; 
     for (int i = 0; i < productCount; ++i) { 
      final Product product = productList.get(i); 
      if (null != product) { 
       if (!currentMarketId.equals(product.marketId)) { 
        currentMarketId = product.marketId; 
        if (null != productArray) { 
         groupedProductArray.put(productArray); 
        } 
        productArray = new JSONArray(); 
       } 
       try { 
        final JSONObject productObject = new JSONObject(); 
        productObject.put(PRODUCT_ID, product.productId); 
        productObject.put(SELECTION, product.selection); 
        productObject.put(SALES, product.sales); 
        productObject.put(MARKET_ID, product.marketId); 
        productArray.put(productObject); 
       } catch (final JSONException e) { 
        Log.e(TAG, e.toString()); 
       } 
      } 
     } 
     if (null != productArray) { 
      groupedProductArray.put(productArray); 
     } 
    } 
    return groupedProductArray; 
} 
} 

schließlich in Ihrer Tätigkeit oder wo auch immer Sie diese Funktion implementieren müssen, sofern Verwendung clases.

MainActivity.java

public class MainActivity extends AppCompatActivity { 
private static final String TAG = MainActivity.class.getSimpleName(); 

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final String data = "\r\n\r\n[\r\n {\r\n  \"product_id\": \"12301\",\r\n  \"selection\": \"No\",\r\n  \"sales\": \"31\",\r\n  \"market_id\": \"10\"\r\n },\r\n {\r\n  \"product_id\": \"12302\",\r\n  \"selection\": \"No\",\r\n  \"sales\": \"24\",\r\n  \"market_id\": \"43\"\r\n },\r\n {\r\n  \"product_id\": \"12303\",\r\n  \"selection\": \"Yes\",\r\n  \"sales\": \"121\",\r\n  \"market_id\": \"10\"\r\n },\r\n {\r\n  \"product_id\": \"12304\",\r\n  \"selection\": \"No\",\r\n  \"sales\": \"0\",\r\n  \"market_id\": \"43\"\r\n },\r\n {\r\n  \"product_id\": \"12305\",\r\n  \"selection\": \"Yes\",\r\n  \"sales\": \"20\",\r\n  \"market_id\": \"43\"\r\n }\r\n]\r\n\r\n"; 
    final List<Product> productList = getProductList(data); 
    Collections.sort(productList, new Product()); 
    final JSONArray sortedProductArray = getProductArray(productList); 
    Log.e(TAG, sortedProductArray.toString()); // Here you have! 
} 

private List<Product> getProductList(final String data) { 
    List<Product> productList = new ArrayList<>(); 
    try { 
     final JSONArray productArray = new JSONArray(data); 
     final ProductParser parser = new ProductParser(); 
     productList = parser.parseProductArrayToProductList(productArray); 
    } catch (final JSONException e) { 
     Log.e(TAG, e.toString()); 
    } 
    return productList; 
} 

private JSONArray getProductArray(final List<Product> productList) { 
    final ProductParser parser = new ProductParser(); 
    return parser.parseProductListToGroupedProductArray(productList); 
} 
} 
Verwandte Themen