Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在jsonArray Android中对JSONObject进行分组_Android_Arrays_Json_Sorting - Fatal编程技术网

在jsonArray Android中对JSONObject进行分组

在jsonArray Android中对JSONObject进行分组,android,arrays,json,sorting,Android,Arrays,Json,Sorting,我有一个jsonArray,其中包含一组JSONObject,我想通过market_id对它们进行分组,这样具有类似market_id的对象就可以分别保存在它们自己的列表或数组中。我怎样才能做到这一点 [ { "product_id": "12301", "selection": "No", "sales": "31", "market_id": "10", }, { "product_id": "12302", "selection": "No"

我有一个jsonArray,其中包含一组JSONObject,我想通过market_id对它们进行分组,这样具有类似market_id的对象就可以分别保存在它们自己的列表或数组中。我怎样才能做到这一点

[
{
    "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",
},
]

为了实现这样的目标:

[{
    "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",
},]

最后,我简单地遍历了jsonArray中的每个对象,并将共享相似市场id的对象添加到它们自己的jsonArray中。虽然不漂亮,但很管用

  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")) {
              ....
试试看{
JSONArray JSONArray=新JSONArray(mainjson);
for(int i=0;i
首先创建一个实现Comparator接口的Product model类,这样您就可以按marketId对ProductList进行排序

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;
}
}
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;
}
}
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);
}
}
公共类产品实现Comparator{
公共字符串productId;
公共字符串选择;
公开销售;
公共市场化;
公共产品(){
超级();
}
@凌驾
公共整数比较(最终产品p1、最终产品p2){
如果(!TextUtils.isEmpty(p1.marketId)和&!TextUtils.isEmpty(p2.marketId)){
返回p1.marketId.compareTo(p2.marketId);//升序
}
返回0;
}
}
其次,创建一个产品解析器类,将产品列表JSONArray解析为产品类型列表,并将产品类型列表解析为分组产品JSONArray

ProductParser.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;
}
}
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;
}
}
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);
}
}
公共类ProductParser{
私有静态最终字符串标记=ProductParser.class.getSimpleName();
私有静态最终字符串PRODUCT\u ID=“PRODUCT\u ID”;
私有静态最终字符串SELECTION=“SELECTION”;
私有静态最终字符串SALES=“SALES”;
私有静态最终字符串MARKET\u ID=“MARKET\u ID”;
私有静态最终字符串HELPER_ID=“-1”;
公共产品解析器(){
超级();
}
公共列表parseProductArrayToProductList(最终JSONArray productArray){
最终列表productsList=new ArrayList();
if(null!=productArray){
试一试{
final int productCount=productArray.length();
对于(int i=0;i
最后,在您的活动中或需要实现此功能的任何地方,请使用提供的类别

MainActivity.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;
}
}
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;
}
}
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);
}
}
public类MainActivity扩展了AppCompatActivity{
私有静态最终字符串标记=MainActivity.class.getSimpleName();
@凌驾
创建时受保护的void(最终捆绑包savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
“1.31”和\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n“选择”的“选择”除了除了除了除了除了“否”以外,\r\n\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_id\“12303\”,\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n市场的市场的身份识别码”是指“12.121\”,\\r\n\\n\3\3\3\3\3\3\n\n\n\n\n\n\n\3\3\3\3\3\3\3\3\3\3\3\n\n\n\n\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n\r\n\n\n\r\n\n\n\n\r\n\n\n\r\n\r\n\n\n\n\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n r\n\“sales\”:“20\”,\r\n“market\u id\”:“43\”