java - 将 Json 解析为 Java

标签 java json list parsing sonarqube

我想解析这个 Json 代码:

[{"id":7,"key":"integrationContinue:integrationContinue","name":"life Portlet","scope":"PRJ","qualifier":"TRK","date":"2012-03-26T10:10:22+0100","lname":"life Portlet","lang":"java","version":"1.0-SNAPSHOT","description":"","msr":[{"key":"ncloc","val":897.0,"frmt_val":"897"},{"key":"coverage","val":0.6,"frmt_val":"0,6%"}]}]

我创建了两个类:

 public class Ressources {

  private String id;
    private String key;
    private String name;
    private String lname;
    private String scope;
    private String qualifier;
    private String lang;
    private String version;
    private String date;
    private List<Mesures> msr;


    public Ressources() {

    }

    public Ressources(String id, String key, String name, String lname,
            String scope, String qualifier, String lang, String version,
            String date, List<Mesures> msr) {
        super();
        this.id = id;
        this.key = key;
        this.name = name;
        this.lname = lname;
        this.scope = scope;
        this.qualifier = qualifier;
        this.lang = lang;
        this.version = version;
        this.date = date;
        this.msr = msr;
    }
 @Override
 public String toString() {return "Ressources : \n id=" + id  + ",\n key=" + key + ",\n name=" + name + ",\n lname=" + lname + ",\n scope=" + scope + ",\n qualifier=" + qualifier + ",\n lang=" + lang + ",\n version=" + version + ",\n date=" + date;

 public class Ressources {

  private String id;
    private String key;
    private String name;
    private String lname;
    private String scope;
    private String qualifier;
    private String lang;
    private String version;
    private String date;
    private List<Mesures> msr;


    public Ressources() {

    }

    public Ressources(String id, String key, String name, String lname,
            String scope, String qualifier, String lang, String version,
            String date, List<Mesures> msr) {
        super();
        this.id = id;
        this.key = key;
        this.name = name;
        this.lname = lname;
        this.scope = scope;
        this.qualifier = qualifier;
        this.lang = lang;
        this.version = version;
        this.date = date;
        this.msr = msr;
    }
 @Override
 public String toString() {return "Ressources : \n id=" + id  + ",\n key=" + key + ",\n name=" + name + ",\n lname=" + lname + ",\n scope=" + scope + ",\n qualifier=" + qualifier + ",\n lang=" + lang + ",\n version=" + version + ",\n date=" + date;}

(带有 getter 和 setter)

public class Mesures {


private String key;
private float val;
private String frmt_val;

public Mesures(){}
public Mesures(String akey, float aval,String afrmt_val ){
    key=akey;
    val=aval;
    frmt_val=afrmt_val;

}

 @Override
 public String toString() {return " \n key=" + key  + ",\n val=" + val + ",\n frmt_val=" + frmt_val;
}

然后我创建了两个函数:

 public List<Ressources> parseGson_Ressources(String jsonToParse) {

        JsonElement jsonElement = new JsonParser().parse(jsonToParse);
        JsonArray array = jsonElement.getAsJsonArray();

        @SuppressWarnings("rawtypes")
        Iterator iterator = array.iterator();
        List<Ressources> ressources = new ArrayList<Ressources>();

        while (iterator.hasNext()) {
            JsonElement jsontmp = (JsonElement) iterator.next();
            Gson gson = new Gson();
            Ressources ressource1 = gson.fromJson(jsontmp, Ressources.class);        
            ressources.add(ressource1);

        }

        return ressources;
    }

 public List<Mesures> parseGson_Mesures(String jsonToParse) {

        JsonElement jsonElement = new JsonParser().parse(jsonToParse);
        JsonArray array = jsonElement.getAsJsonArray();

        @SuppressWarnings("rawtypes")
        Iterator iterator = array.iterator();
        List<Mesures> mesures = new ArrayList<Mesures>();

        while (iterator.hasNext()) {
            JsonElement jsontmp = (JsonElement) iterator.next();
            Gson gson = new Gson();
            Mesures mesure = gson.fromJson(jsontmp, Mesures.class);
            mesures.add(mesure);
        }   
        return mesures;
    }

然后我写了这段代码来得到结果:

 String xxx = RequestSonar(); //wich return the Json result

     List<Ressources> listRessources = new ArrayList<Ressources>();
     listRessources = rs.parseGson_Ressources(xxx);
     Iterator<Ressources> iterator;
     iterator = listRessources.iterator();

     while (iterator.hasNext()) {

         Ressources ressource = iterator.next();
         System.out.println(ressource.toString());
     }
     List<Mesures> listMesures = new ArrayList<Mesures>();
     Iterator<Mesures> iterator2;
     listMesures = rs.parseGson_Mesures(xxx);
     iterator2 = listMesures.iterator();

     while (iterator2.hasNext()) {

        Mesures mesure = iterator2.next();
        System.out.println(mesure.toString());
    }

执行后我得到这个结果:

Ressources : 
id=7,
key=integrationContinue:integrationContinue,
name=life Portlet,
lname=life Portlet,
scope=PRJ,
qualifier=TRK,
lang=java,
version=1.0-SNAPSHOT,
date=2012-03-26T10:10:22+0100

key=integrationContinue:integrationContinue,
val=0.0,
frmt_val=null

我该如何解决这个问题?

最佳答案

i think this will help you,

create two classes with getter setter methods

public class Ressources {

    private String id;
    private String key;
    private String name;
    private String lname;
    private String scope;
    private String qualifier;
    private String lang;
    private String version;
    private String date;
    private List<Mesures> msr;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLname() {
        return lname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }

    public String getScope() {
        return scope;
    }

    public void setScope(String scope) {
        this.scope = scope;
    }

    public String getQualifier() {
        return qualifier;
    }

    public void setQualifier(String qualifier) {
        this.qualifier = qualifier;
    }

    public String getLang() {
        return lang;
    }

    public void setLang(String lang) {
        this.lang = lang;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public List<Mesures> getMsr() {
        return msr;
    }

    public void setMsr(List<Mesures> msr) {
        this.msr = msr;
    }

}

public class Mesures {

    private String key;
    private float val;
    private String frmt_val;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public float getVal() {
        return val;
    }

    public void setVal(float val) {
        this.val = val;
    }

    public String getFrmt_val() {
        return frmt_val;
    }

    public void setFrmt_val(String frmt_val) {
        this.frmt_val = frmt_val;
    }

}

then use this to Parse your JSON

String jsonl = "[{'id':7,'key':'integrationContinue:integrationContinue','name':'life Portlet','scope':'PRJ','qualifier':'TRK','date':'2012-03-26T10:10:22+0100','lname':'life Portlet','lang':'java','version':'1.0-SNAPSHOT','description':'','msr':[{'key':'ncloc','val':897.0,'frmt_val':'897'},{'key':'coverage','val':0.6,'frmt_val':'0,6%'}]}]";

Gson gson = new Gson();
Type collectionType = new TypeToken<List<Ressources>>() {
        }.getType();
List<Ressources> ressourcesList = gson.fromJson(jsonl, collectionType);

Ressources ressources = ressourcesList.get(0);
System.out.println("id :" + ressources.getId());
System.out.println("key :" + ressources.getKey());
System.out.println("name :" + ressources.getName());
System.out.println("scope :" + ressources.getScope());
System.out.println("qualifier :" + ressources.getQualifier());
System.out.println("date :" + ressources.getDate());
System.out.println("lname :" + ressources.getLname());
System.out.println("lang :" + ressources.getLang());
System.out.println("version :" + ressources.getVersion());
System.out.println("Mrs :");

List<Mesures> mrsList = ressources.getMsr();
for (int i = 0; i < mrsList.size(); i++) {
System.out.println("key :" + mrsList.get(i).getKey());
System.out.println("val :" + mrsList.get(i).getVal());
System.out.println("frmt_val :" + mrsList.get(i).getFrmt_val());
}


output:

id :7
key :integrationContinue:integrationContinue
name :life Portlet
scope :PRJ
qualifier :TRK
date :2012-03-26T10:10:22+0100
lname :life Portlet
lang :java
version :1.0-SNAPSHOT
Mrs :
key :ncloc
val :897.0
frmt_val :897
key :coverage
val :0.6
frmt_val :0,6%

关于java - 将 Json 解析为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10010630/

相关文章:

java - 为什么我不能一次初始化多个数组?

java - 如何在JPA/DB2中动态添加Where条件

jquery - 从Ajax调用获取数据,而不是字符串

javascript - 使用 ui-select-match 选择多个条目

java - 在 groovy 中使用 eval

java - 为作为 Windows 服务运行的 Java 应用程序创建安装程序

java - 正则表达式与模式匹配

java - 使用 LocalDateTime 字段将 JSON 反序列化为对象

java - 如何从 bean 类型数组列表中获取元素的索引

r - 根据数据框列表中第 N-1 行的值选择第 N 行