如何在 android 中使用 Gson 或 VOLley 从 json 中删除空值
Posted
技术标签:
【中文标题】如何在 android 中使用 Gson 或 VOLley 从 json 中删除空值【英文标题】:How to remove Empty value from json using Gson or VOlley in android 【发布时间】:2021-01-21 05:17:37 【问题描述】:我试图在使用 GSON 将其发送到 RecyclerView 之前从 JSON 中删除空节点,但未能实现。
我的 JSON 文件如下所示:
"text": [
"count": ,
"word": "",
"name": "",
"score": ,
"Words": "",
"seek":
"count": 6,
"word": "prp_għaċ-",
"name": "prp_għaċ-",
"score": 9.1,
"Words": "kol",
"seek": 2231297
]
MainActivity.java
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, getUrl, null, new Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
Gson gson = new GsonBuilder().create();
Example example = gson.fromJson(response.toString(),Example.class);
Log.i(TAG, "onResponse Hit");
recyclerView.setAdapter(new UserAdapter(MainActivity.this, example.getText()));
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
Log.e("MainActivity", "onErrorResponse: "+ error.getMessage());
);
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(request);
Adapter.java
public UserViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.items_text_list,parent,false);
return new UserViewHolder(view);
@Override
public void onBindViewHolder(@NonNull UserViewHolder holder, int position)
holder.getData(text.get(position));
@Override
public int getItemCount()
return text.size();
class UserViewHolder extends RecyclerView.ViewHolder
TextView textView;
public UserViewHolder(@NonNull View itemView)
super(itemView);
textView = itemView.findViewById(R.id.text121);
public void getData(Text text)
if (text.getCount().toString() != "")
textView.setText(user.getCount().toString());
Example.java
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class Example
@SerializedName("Text")
@Expose
private List<Text> text= null;
public List<Text> getText()
return text;
public void setText(List<Text> text)
this.text= text;
我想在将 null 值发送到 recyclerView 之前删除它。
请帮助我找到正确的解决方案。谢谢
【问题讨论】:
检查键word
是否为空,跳过它。在将数据添加到列表时提供您的代码。
我可以看看你的示例课程吗?
@ErwinKurniawanA 添加
【参考方案1】:
让我们创建一个没有空数据的新列表。
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, getUrl, null, new Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
Gson gson = new GsonBuilder().create();
Example example = gson.fromJson(response.toString(),Example.class);
ArrayList<Text> newList = new ArrayList<>();
for (int i = 0; i < example.getText().size(); i++)
if (!example.getText().get(i).getWord().isEmpty()) // check if word is not empty then add to the new list
newList.add(example.getText().get(i));
Log.i(TAG, "onResponse Hit");
recyclerView.setAdapter(new UserAdapter(MainActivity.this, newList)); // use the filtered list
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
Log.e("MainActivity", "onErrorResponse: "+ error.getMessage());
);
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(request);
【讨论】:
【参考方案2】:Hi 认为第一种方法是跳过为空的键,只将非空值发送到 recyclerView。 或者是这样的:
String json = .... // your json
Type type = new TypeToken<Map<String, Object>>() .getType();
Map<String, Object> data = new Gson().fromJson(json, type);
for (Iterator<Map.Entry<String, Object>> it = data.entrySet().iterator(); it.hasNext();)
Map.Entry<String, Object> entry = it.next();
if (entry.getValue() == null)
it.remove();
else if (entry.getValue().getClass().equals(ArrayList.class))
if (((ArrayList<?>) entry.getValue()).size() == 0)
it.remove();
String json1 = new GsonBuilder().setPrettyPrinting().create().toJson(data);
System.out.println("Latest json "+json1);
【讨论】:
感谢您的回答,但我正在通过服务器的链接解析嵌套的 JSON。所以,问题是如何将我的 JSON 转换为字符串?如果我再次这样做,我需要在将其转换为适配器类之前将其转换为 Text.java 类,它会出现一些问题,请查看我的代码。以上是关于如何在 android 中使用 Gson 或 VOLley 从 json 中删除空值的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 GSON 或 android 中的任何其他库的情况下使用改造以字符串形式获得响应 [重复]
如何在 Android 的 Kotlin 中使用 GSON 将 JSON 对象转换为 JSON 数组