如何从 android 中的 json 对象中删除和解析空字符串并显示为列表
How to remove and parse the empty string from json object in android and display as list
我使用复选框来选择字段,如下图所示
我得到 json 对象作为,
"painWorse":"Sitting,Standing,,,,Lying Down"
我需要解析显示为
- 坐着
- 站立
- 躺着
目前我将文本设置为:
viewHolder.painWorse.setText(assessObject.get("painWorse").toString().replace("\"", ""));
我需要跳过空项目并仅解析和显示选中的 items.How 以实现此目的
适配器代码:
public class AssessmentAdapter extends RealmBasedRecyclerViewAdapter<Assessment, AssessmentAdapter.ViewHolder> {
Context mContext;
public AssessmentAdapter(
Context context,
RealmResults<Assessment> realmResults,
boolean automaticUpdate,
boolean animateIdType) {
super(context, realmResults, automaticUpdate, animateIdType);
mContext = context;
}
public class ViewHolder extends RealmViewHolder {
//
@BindView(R.id.visitDate)
TextView visitDate;
@BindView(R.id.Name)
TextView name;
@BindView(R.id.txtAge)
TextView age;
@BindView(R.id.txtSex)
TextView sex;
@BindView(R.id.problemBegin)
TextView problem;
@BindView(R.id.problem)
TextView problemBegin;
@BindView(R.id.morningRate)
TextView morningRate;
@BindView(R.id.afternoonRate)
TextView afternoonRate;
@BindView(R.id.eveningRate)
TextView eveningRate;
@BindView(R.id.assessmentDetails)
CardView assessmentDetails;
@BindView(R.id.painWorse)
TextView painWorse;
@BindView(R.id.currentCondition)
TextView currentCondition;
@BindView(R.id.diagnosticStudied)
TextView diagnosticStudied;
@BindView(R.id.medications)
TextView medications;
@BindView(R.id.history)
TextView history;
@BindView(R.id.goals)
TextView goals;
public ViewHolder(View container) {
super(container);
ButterKnife.bind(this, container);
}
}
@Override
public ViewHolder onCreateRealmViewHolder(ViewGroup viewGroup, int viewType) {
ViewHolder vh = null;
try {
View v = inflater.inflate(R.layout.assessment_card_view, viewGroup, false);
vh = new ViewHolder(v);
} catch (Exception e) {
Log.v(Constants.TAG, "onCreateRealmViewHolder Exception: " + e.toString());
}
return vh;
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onBindRealmViewHolder(ViewHolder viewHolder, int position) {
final Assessment assessment = realmResults.get(position);
try {
JsonParser parser = new JsonParser();
JsonArray assess = parser.parse(assessment.getAssesment().toString()).getAsJsonArray();
Log.v(Constants.TAG, "assessing" + assess);
JsonObject assessObject = assess.get(0).getAsJsonObject();
Log.v(Constants.TAG, "assessObject" + assessObject);
viewHolder.visitDate.setText(assessObject.get("Date").toString().replace("\"", ""));
viewHolder.name.setText(assessObject.get("Name").toString().replace("\"", ""));
viewHolder.age.setText(assessObject.get("Age").toString().replace("\"", ""));
viewHolder.sex.setText(assessObject.get("Sex").toString().replace("\"", ""));
viewHolder.problem.setText(assessObject.get("Problem").toString().replace("\"", ""));
viewHolder.problemBegin.setText(assessObject.get("ProblemBegin").toString().replace("\"", ""));
viewHolder.morningRate.setText(assessObject.get("morningRate").toString().replace("\"", ""));
viewHolder.afternoonRate.setText(assessObject.get("afternoonRate").toString().replace("\"", ""));
viewHolder.eveningRate.setText(assessObject.get("eveningRate").toString().replace("\"", ""));
viewHolder.painWorse.setText(assessObject.get("painWorse").toString().replace("\"", ""));
viewHolder.currentCondition.setText(assessObject.get("currentCondition").toString().replace("\"", ""));
viewHolder.diagnosticStudied.setText(assessObject.get("Diagnostic").toString().replace("\"", ""));
viewHolder.medications.setText(assessObject.get("Medications").toString().replace("\"", ""));
viewHolder.history.setText(assessObject.get("History").toString().replace("\"", ""));
viewHolder.goals.setText(assessObject.get("Goals").toString().replace("\"", ""));
viewHolder.assessmentDetails.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
} catch (Exception e) {
Log.v(Constants.TAG, "Exception: " + e.toString());
}
}
}
您可以使用 GSON/ Jackson 来解析您的 JSON 对象。您会在这些库中找到大量注释来排除 EMPTY、NULL 等。他们还提供了更容易阅读的代码
此处给出了使用 GSON 的示例
https://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/
在对您的代码一无所知的情况下,我会说您需要使用正则表达式来删除那些多个逗号
String pain = "Sitting,Standing,,,,Lying Down";
pain = pain.replaceAll(",+",","); // Replace every ocurrence of one or more commas with just one comma
// pain = "Sitting,Standing,Lying Down";
一种更清晰、更简单的格式化此信息的方法是使用 LinearLayout
动态填充与项目一样多的 TextView
。因此,一旦您可以执行以下操作:
- 将您的
painWorse
更改为垂直方向的 LinearLayout
- 将您的字符串分成几项
String[] items = pain.split(",");
动态填充你的新LinearLayout
for (String item : items) {
TextView tv = new TextView(context);
tv.setText(item);
// any other styling here...
}
我使用复选框来选择字段,如下图所示
我得到 json 对象作为,
"painWorse":"Sitting,Standing,,,,Lying Down"
我需要解析显示为
- 坐着
- 站立
- 躺着
目前我将文本设置为:
viewHolder.painWorse.setText(assessObject.get("painWorse").toString().replace("\"", ""));
我需要跳过空项目并仅解析和显示选中的 items.How 以实现此目的
适配器代码:
public class AssessmentAdapter extends RealmBasedRecyclerViewAdapter<Assessment, AssessmentAdapter.ViewHolder> {
Context mContext;
public AssessmentAdapter(
Context context,
RealmResults<Assessment> realmResults,
boolean automaticUpdate,
boolean animateIdType) {
super(context, realmResults, automaticUpdate, animateIdType);
mContext = context;
}
public class ViewHolder extends RealmViewHolder {
//
@BindView(R.id.visitDate)
TextView visitDate;
@BindView(R.id.Name)
TextView name;
@BindView(R.id.txtAge)
TextView age;
@BindView(R.id.txtSex)
TextView sex;
@BindView(R.id.problemBegin)
TextView problem;
@BindView(R.id.problem)
TextView problemBegin;
@BindView(R.id.morningRate)
TextView morningRate;
@BindView(R.id.afternoonRate)
TextView afternoonRate;
@BindView(R.id.eveningRate)
TextView eveningRate;
@BindView(R.id.assessmentDetails)
CardView assessmentDetails;
@BindView(R.id.painWorse)
TextView painWorse;
@BindView(R.id.currentCondition)
TextView currentCondition;
@BindView(R.id.diagnosticStudied)
TextView diagnosticStudied;
@BindView(R.id.medications)
TextView medications;
@BindView(R.id.history)
TextView history;
@BindView(R.id.goals)
TextView goals;
public ViewHolder(View container) {
super(container);
ButterKnife.bind(this, container);
}
}
@Override
public ViewHolder onCreateRealmViewHolder(ViewGroup viewGroup, int viewType) {
ViewHolder vh = null;
try {
View v = inflater.inflate(R.layout.assessment_card_view, viewGroup, false);
vh = new ViewHolder(v);
} catch (Exception e) {
Log.v(Constants.TAG, "onCreateRealmViewHolder Exception: " + e.toString());
}
return vh;
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onBindRealmViewHolder(ViewHolder viewHolder, int position) {
final Assessment assessment = realmResults.get(position);
try {
JsonParser parser = new JsonParser();
JsonArray assess = parser.parse(assessment.getAssesment().toString()).getAsJsonArray();
Log.v(Constants.TAG, "assessing" + assess);
JsonObject assessObject = assess.get(0).getAsJsonObject();
Log.v(Constants.TAG, "assessObject" + assessObject);
viewHolder.visitDate.setText(assessObject.get("Date").toString().replace("\"", ""));
viewHolder.name.setText(assessObject.get("Name").toString().replace("\"", ""));
viewHolder.age.setText(assessObject.get("Age").toString().replace("\"", ""));
viewHolder.sex.setText(assessObject.get("Sex").toString().replace("\"", ""));
viewHolder.problem.setText(assessObject.get("Problem").toString().replace("\"", ""));
viewHolder.problemBegin.setText(assessObject.get("ProblemBegin").toString().replace("\"", ""));
viewHolder.morningRate.setText(assessObject.get("morningRate").toString().replace("\"", ""));
viewHolder.afternoonRate.setText(assessObject.get("afternoonRate").toString().replace("\"", ""));
viewHolder.eveningRate.setText(assessObject.get("eveningRate").toString().replace("\"", ""));
viewHolder.painWorse.setText(assessObject.get("painWorse").toString().replace("\"", ""));
viewHolder.currentCondition.setText(assessObject.get("currentCondition").toString().replace("\"", ""));
viewHolder.diagnosticStudied.setText(assessObject.get("Diagnostic").toString().replace("\"", ""));
viewHolder.medications.setText(assessObject.get("Medications").toString().replace("\"", ""));
viewHolder.history.setText(assessObject.get("History").toString().replace("\"", ""));
viewHolder.goals.setText(assessObject.get("Goals").toString().replace("\"", ""));
viewHolder.assessmentDetails.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
} catch (Exception e) {
Log.v(Constants.TAG, "Exception: " + e.toString());
}
}
}
您可以使用 GSON/ Jackson 来解析您的 JSON 对象。您会在这些库中找到大量注释来排除 EMPTY、NULL 等。他们还提供了更容易阅读的代码
此处给出了使用 GSON 的示例
https://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/
在对您的代码一无所知的情况下,我会说您需要使用正则表达式来删除那些多个逗号
String pain = "Sitting,Standing,,,,Lying Down";
pain = pain.replaceAll(",+",","); // Replace every ocurrence of one or more commas with just one comma
// pain = "Sitting,Standing,Lying Down";
一种更清晰、更简单的格式化此信息的方法是使用 LinearLayout
动态填充与项目一样多的 TextView
。因此,一旦您可以执行以下操作:
- 将您的
painWorse
更改为垂直方向的LinearLayout
- 将您的字符串分成几项
String[] items = pain.split(",");
动态填充你的新
LinearLayout
for (String item : items) { TextView tv = new TextView(context); tv.setText(item); // any other styling here... }