【问题标题】:Jackson JSON array accessing杰克逊 JSON 数组访问
【发布时间】:2016-11-29 08:09:03
【问题描述】:

我有一个这样的 Json 文件:

[{
    dname: "xxxx",
    dage: "24"
}, {
    dname: "yyyy",
    dage: "26"
}]

目标:

  1. 我想以数组的形式访问它们
  2. 在 JSON 文件中搜索名称以查找特定名称
  3. 年龄相同。

我做了什么:

文件名:DtExtract.java

 public class DtExtract{

 public static ObjectMapper mapper = new ObjectMapper();

 private Dtmain[] dtmain =mapper.readValue(new File("file location"),     TypeFactory.defaultInstance().constructArrayType(D tmain.class));


 public DtExtract() throws IOException{}
 public String getname(int i) throws IOException { String strname =      dtmain[i].getjname(); return strname;}

 public String getage(int i) throws IOException { String strage = dtmain[i].getjage(); return strage;}

}
class Dtmain {

private String dname;

private String dage;

public Dtmain(){}

public String getjname(){return dname;}

public String getjage(){return dage;}

public void setjname(String dname){ this.dname=dname;}

public void setjage(String dage){ this.dage=dage;}

public String toString(){ return "Student [ name" + dname +", age " +dage +"]";
}

=============================

文件名:Myclass.java

 public class Myclass{

 public static void main(String args[]) throws IOException {

 DtExtract dtextract= new DtExtract();

 for(int i=0; i< 2; i++)

 {

 if (dtextract.getname(i).equals("xxxx")) {System.out.print("Name matches");}

 if (dtextract.getage(i).equals("24")) {System.out.print("Age matches");}

 }
 }
 }

==============================

这是我的代码摘要,但我的问题是

  1. 这个 for 循环真的是在访问 JSON 数组元素吗?
  2. 还有其他更快的方法来进行这种 JSON 解析和比较吗?

【问题讨论】:

  • 您是否在比较 JSON 数据以避免重复?
  • 不...根据比赛我将执行一些其他任务。这只是代码的摘要。
  • 寻找一种更快更简单的方法来搜索我在代码上方提供的 json 数组。
  • 看到这个希望对你有帮助stackoverflow.com/questions/38654814/…

标签: java arrays json jackson


【解决方案1】:

您可以按以下方式进行。你需要从main方法调用这两个方法

请注意,我添加了两种方法来处理数组。与processJsonArrayJava7 相比,processJsonArrayJava8 会更快。

public List<Dtmain> readFromJson()
            throws JsonParseException, JsonMappingException, IOException    {
    ObjectMapper mapper = new ObjectMapper();

    TypeReference<List<Dtmain>> mapType = new TypeReference<List<Dtmain>>() {};
    List<Dtmain> jsonList = mapper.readValue(
            "[{\"dname\": \"xxxx\",\"dage\": \"24\" },{\"dname\": \"yyyy\",\"dage\": \"26\" }]",
            mapType);

    return jsonList;

}

public void processJsonArrayJava7(List<Dtmain> jsonList) {

    for(Dtmain obj : jsonList) {
        //  do what ever you want with obj
    }

}

public void processJsonArrayJava8(List<Dtmain> jsonList) {

    jsonList.parallelStream().forEach(obj->{
     //do what ever you want with obj
    });

}

还请给方法起更好的名字。

【讨论】:

    【解决方案2】:
    public class SayHi {
    public static void main(String args[]) throws IOException {
    try {
            ObjectMapper mapper = new ObjectMapper();
            TypeReference<List<Person>> maptype = new TypeReference<List<Person>>() {};
            List<Person> jsonTopersonList=mapper.readValue(new File("JSON_file_location"), maptype);
            for(int i=0; i<jsonTopersonList.size(); i++){
                System.out.println("Name"+i+":"+jsonTopersonList.get(i).dname);
            }
            for(int i=0; i<jsonTopersonList.size(); i++){
                System.out.println("Age"+i+":"+jsonTopersonList.get(i).dage);
            }
    
        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
    }}
    

    ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++

     public class Person {
        public String dname;
        public int dage;
        public Person() {
        }
        public Person(String dname,
                      int dage) {
            this.dname = dname;
            this.dage = dage;
         }
        public String toString() {
             return "[" + dname + " " + dage +"]";
        }
     }
    

    我想出了这个来反序列化该 json 数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多