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

时间:2018-03-23 16:55:50

标签: android json listview

我可以解析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 - 帕尔马

我该怎么做?

谢谢。

2 个答案:

答案 0 :(得分:1)

假设您的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的内容。

答案 1 :(得分:0)

尝试

export default class MyComponent extends React.Component {
  constructor(props) {
    super(props)
  }
  componentWillReceiveProps(nextProps) {
    if (nextProps.invalid) {
      throw new Error('invalid')
    }
  }
  render() {
    return (
      <div/>
    )
  }
}