后台返回的数据格式有时候根据业务需求,往往不是前端需要的,一个接口甚至能给你返回8种数据结构。我遇到过,没办法只能是手动解析。这还好,起码能解析出来。下面的就不好弄了。
{
"data": [
{
"id": "1",
"tagSize": "50,50",
"labelGap": "1",
"labelDirection": "LabelCommand.DIRECTION.FORWARD, LabelCommand.MIRROR.NORMAL",
"origin": "0,0",
"tearOffMode": "EscCommand.ENABLE.ON",
"labelText": "[{"font":"LabelCommand.FONTTYPE.FONT_10","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"姓名:","x":"38","y":"20"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"血型:","x":"200","y":"20"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"岗位:","x":"38","y":"70"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"班长:","x":"200","y":"70"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"班长电话:","x":"38","y":"150"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"直属单位:","x":"38","y":"190"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"项目名称:","x":"35","y":"220"}]",
"createdUserName": null,
"createdUserId": null,
"createdTime": null
}
],
"message": "获取成功",
"status": "SUCCESS"
}
大家可以看到 labelText 这一项看起来像一个数组,其实是字符串。各种解析都木有办法。什么string转jsonobject,转jsonarray
各种报错。后台又说不好弄,好吧,是时候投机取巧了。既然后台给的是string那只能是咱们前段自己加点东西了
String json = "{\"code\":200,\"message\":\"ok\",\"detail\":" + mprint.get(0).getLabelText() + "}";
mprint.get(0).getLabelText()就是解析后返回的东西。
剩下的不用说了吧,直接解析
PrintTemplateBean最外层的bean,TextBean内部类。
代码:
package com.bean;
import org.json.JSONArray;
import org.json.JSONException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by lake
* 此类的功能:打印的模板
*/
public class PrintTemplateBean {
/**
* data : [{"id":"1","tagSize":"50,50","labelGap":"1","labelDirection":"LabelCommand.DIRECTION.FORWARD, LabelCommand.MIRROR.NORMAL","origin":"0,0","tearOffMode":"EscCommand.ENABLE.ON","labelText":"[{\"font\":\"LabelCommand.FONTTYPE.FONT_10\",\"rotation\":\"LabelCommand.ROTATION.ROTATION_0\",\"Xscal\":\"LabelCommand.FONTMUL.MUL_1\",\"Yscal\":\"LabelCommand.FONTMUL.MUL_1\",\"text\":\"姓名:\",\"x\":\"38\",\"y\":\"20\"},{\"font\":\"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE\",\"rotation\":\"LabelCommand.ROTATION.ROTATION_0\",\"Xscal\":\"LabelCommand.FONTMUL.MUL_1\",\"Yscal\":\"LabelCommand.FONTMUL.MUL_1\",\"text\":\"血型:\",\"x\":\"200\",\"y\":\"20\"},{\"font\":\"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE\",\"rotation\":\"LabelCommand.ROTATION.ROTATION_0\",\"Xscal\":\"LabelCommand.FONTMUL.MUL_1\",\"Yscal\":\"LabelCommand.FONTMUL.MUL_1\",\"text\":\"岗位:\",\"x\":\"38\",\"y\":\"70\"},{\"font\":\"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE\",\"rotation\":\"LabelCommand.ROTATION.ROTATION_0\",\"Xscal\":\"LabelCommand.FONTMUL.MUL_1\",\"Yscal\":\"LabelCommand.FONTMUL.MUL_1\",\"text\":\"班长:\",\"x\":\"200\",\"y\":\"70\"},{\"font\":\"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE\",\"rotation\":\"LabelCommand.ROTATION.ROTATION_0\",\"Xscal\":\"LabelCommand.FONTMUL.MUL_1\",\"Yscal\":\"LabelCommand.FONTMUL.MUL_1\",\"text\":\"班长电话:\",\"x\":\"38\",\"y\":\"150\"},{\"font\":\"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE\",\"rotation\":\"LabelCommand.ROTATION.ROTATION_0\",\"Xscal\":\"LabelCommand.FONTMUL.MUL_1\",\"Yscal\":\"LabelCommand.FONTMUL.MUL_1\",\"text\":\"直属单位:\",\"x\":\"38\",\"y\":\"190\"},{\"font\":\"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE\",\"rotation\":\"LabelCommand.ROTATION.ROTATION_0\",\"Xscal\":\"LabelCommand.FONTMUL.MUL_1\",\"Yscal\":\"LabelCommand.FONTMUL.MUL_1\",\"text\":\"项目名称:\",\"x\":\"35\",\"y\":\"220\"}]","createdUserName":null,"createdUserId":null,"createdTime":null}]
* message : 获取成功
* status : SUCCESS
*/
private String message;
private String status;
private List<DataBean> data;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* id : 1
* tagSize : 50,50
* labelGap : 1
* labelDirection : LabelCommand.DIRECTION.FORWARD, LabelCommand.MIRROR.NORMAL
* origin : 0,0
* tearOffMode : EscCommand.ENABLE.ON
* labelText : [{"font":"LabelCommand.FONTTYPE.FONT_10","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"姓名:","x":"38","y":"20"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"血型:","x":"200","y":"20"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"岗位:","x":"38","y":"70"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"班长:","x":"200","y":"70"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"班长电话:","x":"38","y":"150"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"直属单位:","x":"38","y":"190"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"项目名称:","x":"35","y":"220"}]
* createdUserName : null
* createdUserId : null
* createdTime : null
*/
private String id;
private String tagSize;
private String labelGap;
private String labelDirection;
private String origin;
private String tearOffMode;
private String labelText;
private Object createdUserName;
private Object createdUserId;
private Object createdTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTagSize() {
return tagSize;
}
public void setTagSize(String tagSize) {
this.tagSize = tagSize;
}
public String getLabelGap() {
return labelGap;
}
public void setLabelGap(String labelGap) {
this.labelGap = labelGap;
}
public String getLabelDirection() {
return labelDirection;
}
public void setLabelDirection(String labelDirection) {
this.labelDirection = labelDirection;
}
public String getOrigin() {
return origin;
}
public void setOrigin(String origin) {
this.origin = origin;
}
public String getTearOffMode() {
return tearOffMode;
}
public void setTearOffMode(String tearOffMode) {
this.tearOffMode = tearOffMode;
}
public String getLabelText() {
return labelText;
}
public void setLabelText(String labelText) {
this.labelText = labelText;
}
public Object getCreatedUserName() {
return createdUserName;
}
public void setCreatedUserName(Object createdUserName) {
this.createdUserName = createdUserName;
}
public Object getCreatedUserId() {
return createdUserId;
}
public void setCreatedUserId(Object createdUserId) {
this.createdUserId = createdUserId;
}
public Object getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Object createdTime) {
this.createdTime = createdTime;
}
public void getPrintMsg() {
List<TextBean> textBeans = new ArrayList<>();
try {
JSONArray jsonArray = new JSONArray(getLabelText());
for (int i = 0; i < jsonArray.length(); i++) {
// String font = jsonArray.getJSONArray(0).length();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
public static class TextBean {
/**
* code : 200
* message : FAIL
* detail : [{"font":"LabelCommand.FONTTYPE.FONT_10","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"姓名:","x":"38","y":"20"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"血型:","x":"200","y":"20"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"岗位:","x":"38","y":"70"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"班长:","x":"200","y":"70"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"班长电话:","x":"38","y":"150"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"直属单位:","x":"38","y":"190"},{"font":"LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE","rotation":"LabelCommand.ROTATION.ROTATION_0","Xscal":"LabelCommand.FONTMUL.MUL_1","Yscal":"LabelCommand.FONTMUL.MUL_1","text":"项目名称:","x":"35","y":"220"}]
*/
private int code;
private String message;
private List<DetailBean> detail;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<DetailBean> getDetail() {
return detail;
}
public void setDetail(List<DetailBean> detail) {
this.detail = detail;
}
public static class DetailBean {
/**
* font : LabelCommand.FONTTYPE.FONT_10
* rotation : LabelCommand.ROTATION.ROTATION_0
* Xscal : LabelCommand.FONTMUL.MUL_1
* Yscal : LabelCommand.FONTMUL.MUL_1
* text : 姓名:
* x : 38
* y : 20
*/
private String font;
private String rotation;
private String Xscal;
private String Yscal;
private String text;
private String x;
private String y;
public String getFont() {
return font;
}
public void setFont(String font) {
this.font = font;
}
public String getRotation() {
return rotation;
}
public void setRotation(String rotation) {
this.rotation = rotation;
}
public String getXscal() {
return Xscal;
}
public void setXscal(String Xscal) {
this.Xscal = Xscal;
}
public String getYscal() {
return Yscal;
}
public void setYscal(String Yscal) {
this.Yscal = Yscal;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
}
}
}
使用:
初始化:private List<PrintTemplateBean.TextBean.DetailBean> datas1 = new ArrayList<>(); //数据源
解析之后:
PrintTemplateBean.TextBean beanGoodscar = new Gson().fromJson(json, PrintTemplateBean.TextBean.class);
datas1 = beanGoodscar.getDetail();
不过一般来讲,这种情况极少发生。