现有一 API 请求后返回 JSON字符串,字符串:
[{"default_assigned_to":"test2@seczone.cn","default_qa_contact":"","description":"HTTP请求以及HTTP相应部分","flag_types":{"attachment":[],"bug":[]},"id":3,"is_active":true,"name":"DAST","sort_key":0},...]
如上,的一个JSON对象数组,现需要将其转换为 一个对象集合,但又 不需要 接收所有的属性,比如 忽略 flag_types、sort_key、default_assigned_to等属性,不接受,也就是在我的实体类中是没有这些属性的,比如说只有id和name属性,怎么转换?
实体类不一样的话,只能转换为JSONObject 然后获取子对象, 一级一级的自己写转换啊
用正则表达式匹配,手动加到已有的类中。
引入fastJson依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.21</version>
</dependency>
用你的例子代码如下:
public class TestJson {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args){
String json = "{\"default_assigned_to\":\"test2@seczone.cn\",\"default_qa_contact\":\"\",\"description\":\"HTTP请求以及HTTP相应部分\",\"flag_types\":{\"attachment\":[],\"bug\":[]},\"id\":3,\"is_active\":true,\"name\":\"DAST\",\"sort_key\":0}";
TestJson testJson = JSON.parseObject(json, TestJson.class);
if(testJson != null){
}
}
}
实体类没有的属性,反序列化为对象会自动丢掉
这是反序列化出现问题
你试一下下面代码啊,字符串转json数组啊
String jsonStr = "[{"default_assigned_to":"test2@seczone.cn","default_qa_contact":"","description":"HTTP请求以及HTTP相应部分","flag_types":{"attachment":[],"bug":[]},"id":3,"is_active":true,"name":"DAST","sort_key":0}]"
try
{
JSONArray myJsonArray = new JSONArray(jsonStr);
for(int i=0 ; i < myJsonArray.length() ;i++)
{
//获取每一个JsonObject对象
JSONObject myjObject = myJsonArray.getJSONObject(i);
//获取每一个对象中的值
String id = myjObject.getString("id");
System.out.println(id);
}
}
catch (JSONException e)
{
}
用阿里云的那个json包就可以了
fastjson就可以的,我贴代码:
先新建个实体,需要的字段写进去:
public class TestEntity {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "TestEntity{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
再开始就可以转了:
public class TestImpl {
public static void main(String[] args) {
String json = "[{\"default_assigned_to\":\"test2@seczone.cn\",\"default_qa_contact\":\"\",\"description\":\"HTTP请求以及HTTP相应部分\",\"flag_types\":{\"attachment\":[],\"bug\":[]},\"id\":3,\"is_active\":true,\"name\":\"DAST\",\"sort_key\":0},{\"default_assigned_to\":\"test2@seczone.cn\",\"default_qa_contact\":\"\",\"description\":\"HTTP请求以及HTTP相应部分\",\"flag_types\":{\"attachment\":[],\"bug\":[]},\"id\":4,\"is_active\":true,\"name\":\"test\",\"sort_key\":0}]";
List<TestEntity> entities = JSON.parseArray(json, TestEntity.class);
for (TestEntity entity : entities) {
System.out.println(entity.toString());
}
}
}
pom.xml文件里引入的fastjson:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.40</version>
</dependency>
1:
fastjson 过滤指定字段
@JSONField(serialize=false)
private String message;
序列化的时候就不会包含这个字段。
2:
@JsonIgnoreProperties(value={"addressId"})//在解析成json时,忽略子属性的addressId字段
public class DicType {
private String addressId;
}
3:
@JsonIgnore
private String img;