Pertanyaan Cara mengurai JSON di Java


Saya memiliki teks JSON berikut. Bagaimana saya bisa mem-parsingnya pageName, pagePic, post_id, dll.?

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    }
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": "1234567890",
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": "2",
              "comments": [],
              "timeOfPost": "1234567890"
         }
    ]
}

762
2018-04-07 09:00


asal


Jawaban:


Itu org.json perpustakaan mudah digunakan. Contoh kode di bawah ini:

import org.json.*;


JSONObject obj = new JSONObject(" .... ");
String pageName = obj.getJSONObject("pageInfo").getString("pageName");

JSONArray arr = obj.getJSONArray("posts");
for (int i = 0; i < arr.length(); i++)
{
    String post_id = arr.getJSONObject(i).getString("post_id");
    ......
}

Anda dapat menemukan lebih banyak contoh dari: Parse JSON di Java

Guci yang dapat diunduh: http://mvnrepository.com/artifact/org.json/json


575
2017-09-25 06:56



Demi contoh mari kita asumsikan Anda memiliki kelas Person hanya dengan name.

private class Person {
    public String name;

    public Person(String name) {
        this.name = name;
    }
}

Google GSON (Maven)

Favorit pribadi saya seperti serialisasi JSON / de-serialisasi besar objek.

Gson g = new Gson();

Person person = g.fromJson("{\"name\": \"John\"}", Person.class);
System.out.println(person.name); //John

System.out.println(g.toJson(person)); // {"name":"John"}

Memperbarui

Jika Anda ingin mendapatkan atribut tunggal, Anda dapat melakukannya dengan mudah dengan pustaka Google juga:

JsonObject jsonObject = new JsonParser().parse("{\"name\": \"John\"}").getAsJsonObject();

System.out.println(jsonObject.get("name").getAsString()); //John

Org.JSON (Maven)

Jika Anda tidak memerlukan objek de-serialisasi tetapi untuk sekadar mendapatkan atribut, Anda dapat mencoba org.json (atau lihat contoh GSON di atas!)

JSONObject obj = new JSONObject("{\"name\": \"John\"}");

System.out.println(obj.getString("name")); //John

Jackson (Maven)

ObjectMapper mapper = new ObjectMapper();
Person user = mapper.readValue("{\"name\": \"John\"}", Person.class);

System.out.println(user.name); //John

409
2017-07-31 09:54



  1. Jika seseorang ingin membuat objek JAVA dari JSON dan sebaliknya, gunakan guci pihak ketiga GSON atau JACKSON dll.

    //from object to JSON 
    Gson gson = new Gson();
    gson.toJson(yourObject);
    
    // from JSON to object 
    yourObject o = gson.fromJson(JSONString,yourObject.class);
    
  2. Tetapi jika seseorang hanya ingin mem-parse string JSON dan mendapatkan beberapa nilai, (ATAU membuat string JSON dari awal untuk mengirim alih kawat) cukup gunakan JaveEE jar yang berisi JsonReader, JsonArray, JsonObject, dll. Anda mungkin ingin mengunduh penerapannya spek seperti javax.json. Dengan dua guci ini saya bisa mengurai json dan menggunakan nilai-nilai.

    API ini benar-benar mengikuti model penguraian DOM / SAX XML.

    Response response = request.get(); // REST call 
        JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class)));
        JsonArray jsonArray = jsonReader.readArray();
        ListIterator l = jsonArray.listIterator();
        while ( l.hasNext() ) {
              JsonObject j = (JsonObject)l.next();
              JsonObject ciAttr = j.getJsonObject("ciAttributes");
    

68
2018-02-18 23:34



quick-json parser sangat mudah, fleksibel, sangat cepat dan dapat disesuaikan. Cobalah

Fitur:

  • Compliant dengan spesifikasi JSON (RFC4627)
  • Pengurai JSON Kinerja Tinggi
  • Mendukung pendekatan parsing Fleksibel / Dikonfigurasi
  • Validasi yang dapat dikonfigurasi dari pasangan kunci / nilai dari setiap JSON Hierarchy
  • Mudah digunakan # Tapak sangat kecil
  • Menimbulkan pengecualian ramah pengembang dan mudah dilacak
  • Dukungan Validasi Kustom yang Dapat Di-Pluggable - Keys / Nilai dapat divalidasi dengan mengkonfigurasi validator kustom ketika dan ketika ditemui
  • Dukungan parser Validating dan Non-Validating
  • Dukungan untuk dua jenis konfigurasi (JSON / XML) untuk menggunakan parser memvalidasi cepat JSON
  • Membutuhkan JDK 1.5
  • Tidak ada ketergantungan pada pustaka eksternal
  • Dukungan untuk Generasi JSON melalui serialisasi objek
  • Dukungan untuk pemilihan jenis koleksi selama proses parsing

Ini dapat digunakan seperti ini:

JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonMap=parser.parseJson(jsonString);

61
2018-02-24 06:24



Hampir semua jawaban yang diberikan membutuhkan deserialisasi lengkap JSON ke dalam objek Java sebelum mengakses nilai dalam properti yang diinginkan. Alternatif lain, yang tidak menggunakan rute ini adalah dengan menggunakan JSONPATH yang seperti XPath untuk JSON dan memungkinkan traversing objek JSON.

Ini adalah spesifikasi dan orang-orang baik di JayWay telah membuat implementasi Java untuk spesifikasi yang dapat Anda temukan di sini: https://github.com/jayway/JsonPath

Jadi pada dasarnya untuk menggunakannya, tambahkan ke proyek Anda, misalnya:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>${version}</version>
</dependency>

dan untuk menggunakan:

String pageName = JsonPath.read(yourJsonString, "$.pageInfo.pageName");
String pagePic = JsonPath.read(yourJsonString, "$.pageInfo.pagePic");
String post_id = JsonPath.read(yourJsonString, "$.pagePosts[0].post_id");

dll ...

Periksa halaman spesifikasi JsonPath untuk informasi lebih lanjut tentang cara lain melintang JSON.


25
2017-12-16 13:51



A - Penjelasan

Kamu dapat memakai Jackson perpustakaan, untuk mengikat JSON String ke dalam POJO (Objek Lama Jawa Kuno) contoh. POJO hanyalah sebuah kelas dengan hanya bidang pribadi dan metode pengambil / penyetel publik. Jackson akan melintasi metode (menggunakan refleksi), dan memetakan objek JSON ke instance POJO karena nama kolom kelas sesuai dengan nama bidang objek JSON.

Di objek JSON Anda, yang sebenarnya adalah a gabungan objek, objek utama terdiri dari dua sub-objek. Jadi, kelas POJO kami harus memiliki hierarki yang sama. Saya akan memanggil seluruh JSON Object sebagai Halaman obyek. Halaman objek terdiri dari Info halaman objek, dan a Pos array objek.

Jadi kita harus membuat tiga kelas POJO yang berbeda;

  • Halaman Kelas, gabungan dari Info halaman Kelas dan susunan Pos Contoh
  • Info halaman Kelas
  • Kiriman Kelas

Satu-satunya paket yang saya gunakan adalah Jackson ObjectMapper, yang kami lakukan adalah data yang mengikat;

com.fasterxml.jackson.databind.ObjectMapper

Dependensi yang diperlukan, file jar tercantum di bawah ini;

  • jackson-core-2.5.1.jar
  • jackson-databind-2.5.1.jar
  • jackson-annotations-2.5.0.jar

Ini kode yang diperlukan;

B - Kelas POJO Utama: Halaman

package com.levo.jsonex.model;

public class Page {

    private PageInfo pageInfo;
    private Post[] posts;

    public PageInfo getPageInfo() {
        return pageInfo;
    }

    public void setPageInfo(PageInfo pageInfo) {
        this.pageInfo = pageInfo;
    }

    public Post[] getPosts() {
        return posts;
    }

    public void setPosts(Post[] posts) {
        this.posts = posts;
    }

}

C - Kelas POJO Anak: HalamanInfo

package com.levo.jsonex.model;

public class PageInfo {

    private String pageName;
    private String pagePic;

    public String getPageName() {
        return pageName;
    }

    public void setPageName(String pageName) {
        this.pageName = pageName;
    }

    public String getPagePic() {
        return pagePic;
    }

    public void setPagePic(String pagePic) {
        this.pagePic = pagePic;
    }

}

D - Kelas POJO Anak: Posting

package com.levo.jsonex.model;

public class Post {

    private String post_id;
    private String actor_id;
    private String picOfPersonWhoPosted;
    private String nameOfPersonWhoPosted;
    private String message;
    private int likesCount;
    private String[] comments;
    private int timeOfPost;

    public String getPost_id() {
        return post_id;
    }

    public void setPost_id(String post_id) {
        this.post_id = post_id;
    }

    public String getActor_id() {
        return actor_id;
    }

    public void setActor_id(String actor_id) {
        this.actor_id = actor_id;
    }

    public String getPicOfPersonWhoPosted() {
        return picOfPersonWhoPosted;
    }

    public void setPicOfPersonWhoPosted(String picOfPersonWhoPosted) {
        this.picOfPersonWhoPosted = picOfPersonWhoPosted;
    }

    public String getNameOfPersonWhoPosted() {
        return nameOfPersonWhoPosted;
    }

    public void setNameOfPersonWhoPosted(String nameOfPersonWhoPosted) {
        this.nameOfPersonWhoPosted = nameOfPersonWhoPosted;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public int getLikesCount() {
        return likesCount;
    }

    public void setLikesCount(int likesCount) {
        this.likesCount = likesCount;
    }

    public String[] getComments() {
        return comments;
    }

    public void setComments(String[] comments) {
        this.comments = comments;
    }

    public int getTimeOfPost() {
        return timeOfPost;
    }

    public void setTimeOfPost(int timeOfPost) {
        this.timeOfPost = timeOfPost;
    }

}

E - Contoh File JSON: sampleJSONFile.json

Saya baru saja menyalin sampel JSON Anda ke dalam file ini dan meletakkannya di bawah folder proyek.

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    },
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": "1234567890",
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": "2",
              "comments": [],
              "timeOfPost": "1234567890"
         }
    ]
}

F - Kode Demo

package com.levo.jsonex;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.levo.jsonex.model.Page;
import com.levo.jsonex.model.PageInfo;
import com.levo.jsonex.model.Post;

public class JSONDemo {

    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();

        try {
            Page page = objectMapper.readValue(new File("sampleJSONFile.json"), Page.class);

            printParsedObject(page);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static void printParsedObject(Page page) {
        printPageInfo(page.getPageInfo());
        System.out.println();
        printPosts(page.getPosts());
    }

    private static void printPageInfo(PageInfo pageInfo) {
        System.out.println("Page Info;");
        System.out.println("**********");
        System.out.println("\tPage Name : " + pageInfo.getPageName());
        System.out.println("\tPage Pic  : " + pageInfo.getPagePic());
    }

    private static void printPosts(Post[] posts) {
        System.out.println("Page Posts;");
        System.out.println("**********");
        for(Post post : posts) {
            printPost(post);
        }
    }

    private static void printPost(Post post) {
        System.out.println("\tPost Id                   : " + post.getPost_id());
        System.out.println("\tActor Id                  : " + post.getActor_id());
        System.out.println("\tPic Of Person Who Posted  : " + post.getPicOfPersonWhoPosted());
        System.out.println("\tName Of Person Who Posted : " + post.getNameOfPersonWhoPosted());
        System.out.println("\tMessage                   : " + post.getMessage());
        System.out.println("\tLikes Count               : " + post.getLikesCount());
        System.out.println("\tComments                  : " + Arrays.toString(post.getComments()));
        System.out.println("\tTime Of Post              : " + post.getTimeOfPost());
    }

}

G - Output Demo

Page Info;
****(*****
    Page Name : abc
    Page Pic  : http://example.com/content.jpg
Page Posts;
**********
    Post Id                   : 123456789012_123456789012
    Actor Id                  : 1234567890
    Pic Of Person Who Posted  : http://example.com/photo.jpg
    Name Of Person Who Posted : Jane Doe
    Message                   : Sounds cool. Can't wait to see it!
    Likes Count               : 2
    Comments                  : []
    Time Of Post              : 1234567890

24
2017-07-12 19:06



Anda bisa menggunakannya Google Gson.

Menggunakan pustaka ini Anda hanya perlu membuat model dengan struktur JSON yang sama. Kemudian model secara otomatis diisi. Anda harus memanggil variabel Anda sebagai kunci JSON Anda, atau gunakan @SerializedName jika Anda ingin menggunakan nama yang berbeda.

Untuk contoh Anda:

JSON:

{
"pageInfo": {
     "pageName": "abc",
     "pagePic": "http://example.com/content.jpg"
}
"posts": [
     {
          "post_id": "123456789012_123456789012",
          "actor_id": "1234567890",
          "picOfPersonWhoPosted": "http://example.com/photo.jpg",
          "nameOfPersonWhoPosted": "Jane Doe",
          "message": "Sounds cool. Can't wait to see it!",
          "likesCount": "2",
          "comments": [],
          "timeOfPost": "1234567890"
     }
]

}

Model:

class MyModel {

    private PageInfo pageInfo;
    private ArrayList<Post> posts = new ArrayList<>();
}

class PageInfo {

    private String pageName;
    private String pagePic;
}

class Post {

    private String post_id;

    @SerializedName("actor_id") // <- example SerializedName
    private String actorId;

    private String picOfPersonWhoPosted;
    private String nameOfPersonWhoPosted;
    private String message;
    private String likesCount;
    private ArrayList<String> comments;
    private String timeOfPost;
}

Sekarang Anda dapat mem-parsing menggunakan pustaka Gson:

MyModel model = gson.fromJson(jsonString, MyModel.class);

Anda dapat menghasilkan model dari JSON secara otomatis menggunakan alat online seperti ini.


20
2018-06-01 15:20



Menggunakan minimal-json yang sangat cepat dan mudah digunakan. Anda dapat mem-parsing dari string obj dan Stream.

Contoh data:

{
  "order": 4711,
  "items": [
    {
      "name": "NE555 Timer IC",
      "cat-id": "645723",
      "quantity": 10,
    },
    {
      "name": "LM358N OpAmp IC",
      "cat-id": "764525",
      "quantity": 2
    }
  ]
}

Parsing:

JsonObject object = Json.parse(input).asObject();
int orders = object.get("order").asInt();
JsonArray items = object.get("items").asArray();

Membuat JSON:

JsonObject user = Json.object().add("name", "Sakib").add("age", 23);

Maven:

<dependency>
  <groupId>com.eclipsesource.minimal-json</groupId>
  <artifactId>minimal-json</artifactId>
  <version>0.9.4</version>
</dependency>

19
2017-08-15 19:57