gpt4 book ai didi

android - 如何从 JSONArray 中删除两个相同的元素?

转载 作者:行者123 更新时间:2023-11-30 00:03:32 25 4
gpt4 key购买 nike

我可以解析 json 并用 listview 列出它。

我想从 json 中删除两个相同的元素,我只想列出一个。

代码:

public class MainActivity extends AppCompatActivity {

ArrayList<Product> arrayList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
arrayList = new ArrayList<>();

runOnUiThread(new Runnable() {
@Override
public void run() {
new ReadJSON().execute(url);
}
});
}

class ReadJSON extends AsyncTask<String, Integer, String> {

@Override
protected String doInBackground(String... params) {
return readURL(params[0]);
}

@Override
protected void onPostExecute(String content) {
try {

JSONObject jsonObject = new JSONObject(content);
JSONArray jsonArray = jsonObject.getJSONArray("School");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject c = jsonArray.getJSONObject(i);
JSONArray server = c.getJSONArray("Names");
for(int j=0; j<server.length(); j++){
JSONObject serverObject = server.getJSONObject(j);

arrayList.add(new Product(
serverObject.getString("id"),
serverObject.getString("name")
));
}
}
} catch (JSONException e) {
e.printStackTrace();
}
NewtAdapter adapter = new NewtAdapter(
getApplicationContext(), R.layout.list, arrayList
);
ListView listview = (ListView) findViewById(R.id.listView);
listview.setAdapter(adapter);
}
}
}

json文件:

{
"School":[
{
"Names":[
{"id":"1", "name":"John"},
{"id":"2", "name":"Amanda"},
{"id":"3", "name":"Robert"},
{"id":"4", "name":"Jackie"},
{"id":"5", "name":"Palma"},
{"id":"1", "name":"Walcott"}
]
}
]
}

输出:

1 - 约翰


2 - 阿曼达


3 - 罗伯特


4 - 成龙


5 - 帕尔马


1 - 沃尔科特

我想删除相同的 ID,只想列出一个。

输出应该是这样的:

1 - 约翰


2 - 阿曼达


3 - 罗伯特


4 - 成龙


5 - 帕尔马

我该怎么做?

谢谢。

最佳答案

假设您的 Product 类有一个 getId() 方法,修改您的代码,从此:

for(int j=0; j<server.length(); j++){
JSONObject serverObject = server.getJSONObject(j);

arrayList.add(new Product(
serverObject.getString("id"),
serverObject.getString("name")
));
}

为此:

for(int j=0; j<server.length(); j++){
JSONObject serverObject = server.getJSONObject(j);

boolean alreadyInList = false;
for (Product p : arrayList) {
if (p.getId().equals(serverObject.getString("id")))
alreadyInList = true;
}

if (!alreadyInList)
arrayList.add(new Product(
serverObject.getString("id"),
serverObject.getString("name")
));
}

基本上,在将新项目添加到列表中之前,您会检查是否已经存在具有相同 ID 的项目。

关于android - 如何从 JSONArray 中删除两个相同的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49454824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com