两个JsonArray`s比较缺失的钥匙

时间:2016-11-05 21:43:11

标签: java android arrays json

我有2个带有来自API

的数据的JsonArrays

Api 1

[
   {
      "id":1,
      "value":270
   },
   {
      "id":2,
      "value":1432493
   },
   {
      "id":3,
      "value":63
   },
   {
      "id":5,
      "value":412
   },
   {
      "id":6,
      "value":371
   },
   {
      "id":7,
      "value":824
   },
   {
      "id":9,
      "value":266
   }
]

Api 2

[
   {
      "id":1,
      "name":"name",
      "description":"description"
   },
   {
      "id":2,
      "name":"name",
      "description":"description"
   },
   {
      "id":3,
      "name":"name",
      "description":"description"
   },
   {
      "id":4,
      "name":"name",
      "description":"description"
   },
   {
      "id":5,
      "name":"name",
      "description":"description"
   },
   {
      "id":6,
      "name":"name",
      "description":"description"
   },
   {
      "id":7,
      "name":"name",
      "description":"description"
   },
   {
      "id":8,
      "name":"name",
      "description":"description"
   },
   {
      "id":9,
      "name":"name",
      "description":"description"
   }
]

我将把它变成新数组

            JSONArray jArray = new JSONArray(API1);
            JSONArray jArray1 = new JSONArray(API2);

            for(int i=0;i<jArray1.length();i++) {
                JSONObject json_data = jArray.getJSONObject(i);
                JSONObject json_data1 = jArray1.getJSONObject(i);
                DataWallet walletData = new DataWallet();
                if (json_data.getString("id").equals(json_data1.getString("id"))) {
                    walletData.wallet_id = json_data.getString("id");
                    walletData.textWalletNumber = json_data.getString("value");
                    walletData.wallet_name = json_data1.getString("name");
                    walletData.wallet_desc = json_data1.getString("description");

                } else {
                    walletData.wallet_id = json_data1.getString("id");
                    walletData.textWalletNumber = "0";
                    walletData.wallet_name = json_data1.getString("name");
                    walletData.wallet_desc = json_data1.getString("description");

                }
                data.add(walletData);

            }

现在我有问题了 1,2,3工作正常4是API1的问题没有用“0”赋值,我会在代码上加上代码,但这不起作用。

2 个答案:

答案 0 :(得分:0)

在第一个(jArray1)内部还需要第二个for循环来迭代jArray。总共需要两个for循环来组合2个数组。如果你有一个非常庞大的阵列,最好使用更好的算法,例如二进制搜索。它使O更快,更优化。

这是它应该是什么样子。我现在没有任何编辑器来测试它,或者可能存在一些synax错误。这个概念是对的。我建议你学习Bobble Search和Binary Search的概念。如果您了解它,您可以解决此类问题。

    JSONArray jArray = new JSONArray(API1);
    JSONArray jArray1 = new JSONArray(API2);

    for(int i=0;i<jArray1.length();i++) {
      for(int j=0; j<jArray.lenght();j++){
            JSONObject json_data = jArray1.getJSONObject(i);
            JSONObject json_data1 = jArray.getJSONObject(j);
            DataWallet walletData = new DataWallet();
            if (json_data.getString("id").equals(json_data1.getString("id"))) {
                walletData.wallet_id = json_data.getString("id");
                walletData.textWalletNumber = json_data.getString("value");
                walletData.wallet_name = json_data1.getString("name");
                walletData.wallet_desc = json_data1.getString("description");
                data.add(walletData);
            } 

        }
}

答案 1 :(得分:0)

好的,首先关闭字符串比较id是个坏主意。您应该将它们用作int值。与值相同。修复模型以支持该模型后,您应该能够使用此代码。有更好的方法可以使用序列化库和OO实践来完成此操作,但是要使用您已经使用的方法,我们可以通过比较两个列表的id来实现。

JSONArray jArray = new JSONArray(API1);
JSONArray jArray1 = new JSONArray(API2);
for(int index_in_jArr1 = 0; index_in_jArr1 < jArray1.length(); index_in_jArr1++) {
      JSONObject json_data_jArr1 = jArray.getJSONObject(index_in_jArr1);
      int jArr1_id = json_data_jArr1.getInt("id");
      for(int index_in_jArr = 0; index_in_jArr < jArray.length(); index_in_jArr++) {
           DataWallet walletData = new DataWallet();
           JSONObject json_data_injArr = jArray1.getJSONObject(index_in_jArr);
           int jArr_id = json_data_jArr1.getInt("id");
           if(jArr1_id != jArr_id) {
                 walletData.wallet_id = json_data_jArr1.getInt("id");
                 walletData.textWalletNumber = 0;
                 walletData.wallet_name = json_data_jArr1.getString("name");
                 walletData.wallet_desc = json_data_jArr1.getString("description");
            } else {
                 walletData.wallet_id = json_data_injArr.getInt("id");
                 walletData.textWalletNumber = json_data_injArr.getInt("value");
                 walletData.wallet_name = json_data_jArr1.getString("name");
                 walletData.wallet_desc = json_data_jArr1.getString("description");
            }
            data.add(walletData);
       }
 }