繁体   English   中英

如何从json字符串中提取值

[英]How to extract the value from a json String

我试图从在字符串中多次出现的 json 字符串中提取一个值。在我的代码中,我只得到该字符串的最后一次出现。我正在发布我的 json 字符串和 java 代码

    public class JsonDemo{

public static void main(String args[]) 

// let's read
readJson("book.json");
 }
 public static void readJson(String file) {
JSONParser parser = new JSONParser();

try {
    System.out.println("Reading JSON file from Java program");
    FileReader fileReader = new FileReader(file);
    JSONObject json = (JSONObject) parser.parse(fileReader);


    for(int  i=0;i<json.size();i++){

         String title = (String) json.get("title");
          System.out.println("title: " + title);
    }

   /* String title = (String) json.get("title");
    String author = (String) json.get("author");
    Long price = (Long) json.get("price");


    System.out.println("author: " + author);
    System.out.println("price: " + price);

    JSONArray characters = (JSONArray) json.get("characters");
    Iterator i = characters.iterator();

    System.out.println("characters: ");
    while (i.hasNext()) {
        System.out.println(" " + i.next());
    }*/

} catch (Exception ex) {
    ex.printStackTrace();
  }
   } 

这是我的 json 字符串

 [{jobId=501, candidateId=11824, intAvailability=[{"title":"Phone","start":"2015-10-18T00:00:00.000Z","end":"2015-10-18T02:00:00.000Z"},{"title":"Phone","start":"2015-10-19T00:00:00.000Z","end":"2015-10-19T02:00:00.000Z"},{"title":"Phone","start":"2015-10-20T00:00:00.000Z","end":"2015-10-20T02:00:00.000Z"},{"title":"On site","start":"2015-10-25T00:00:00.000Z","end":"2015-10-25T02:00:00.000Z"},{"title":"On site","start":"2015-10-26T00:00:00.000Z","end":"2015-10-26T02:00:00.000Z"},{"title":"On site","start":"2015-10-27T00:00:00.000Z","end":"2015-10-27T02:00:00.000Z"},{"title":"On site","start":"2015-10-28T00:00:00.000Z","end":"2015-10-28T02:00:00.000Z"}], appliedIntOrWorkedWithClient=No, otherOppoWithEmployer=No, inhibitYourAbility=}, {jobId=501, candidateId=12201, intAvailability=[{"title":"Phone","start":"2015-10-31T00:00:00.000Z","end":"2015-10-31T01:30:00.000Z"},{"title":"Phone","start":"2015-11-01T00:00:00.000Z","end":"2015-11-01T01:30:00.000Z"},{"title":"Phone","start":"2015-11-02T00:00:00.000Z","end":"2015-11-02T01:30:00.000Z"},{"title":"On site","start":"2015-11-03T00:00:00.000Z","end":"2015-11-03T01:30:00.000Z"},{"title":"On site","start":"2015-11-04T00:00:00.000Z","end":"2015-11-04T01:30:00.000Z"},{"title":"On site","start":"2015-11-05T00:00:00.000Z","end":"2015-11-05T01:30:00.000Z"},{"title":"On site","start":"2015-11-06T00:00:00.000Z","end":"2015-11-06T01:30:00.000Z"}], appliedIntOrWorkedWithClient=No, otherOppoWithEmployer=No, inhibitYourAbility=}]

我只得到“男人波特与混血王子”的价值,但我想要“哈利波特与混血王子”和“男人波特与混血王子”

讨论请参考: https : //esdiscuss.org/topic/json-duplicate-keys

基本上,JSON RFC 建议解释器拒绝这种情况,或者只返回最后一个,这就是您所获得的。

为什么不尝试使用 gson 库。

public class Reader {

    public static void main(String[] args) {

        try {
            JsonReader reader = new JsonReader(new FileReader("path_to _ur_jsonfile.json"));

            reader.beginObject();
            while (reader.hasNext()) {

                String name = reader.nextName();

                if (name.equals("author")) {

                    System.out.println(reader.nextString());

                } else if (name.equals("title")) {

                    System.out.println(reader.nextString());

                } else if (name.equals("price")) {

                    System.out.println(reader.nextDouble());

                } else if (name.equals("characters")) {
                    reader.beginArray();
                    while (reader.hasNext()) {
                        String chart = reader.nextString();
                        System.out.println(chart);
                    }
                    reader.endArray();
                } else {
                    reader.skipValue();
                }

            }
            reader.endObject();

            reader.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

输出 :

J. K. Rolling
Harry Potter and Half Blood Prince
20.0
Harry
Ron
Hermoinee
Man Potter and Half Blood Prince

下载http://www.java2s.com/Code/JarDownload/gson/gson-2.2.2.jar.zip

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM