我有2个带有来自API
的数据的JsonArraysApi 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”赋值,我会在代码上加上代码,但这不起作用。
答案 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);
}
}