Java Json Java中json的構造和解析 $Java-json系列(一):用GSON解析Json格式數據

1、org.json

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

 

Java中json的構造和解析,下載html

JSONObject json=new JSONObject();
json.put("Article_id", "66496");

 

java數組轉json數組,再轉json字符串:java

/*
 題目: 將顏色數組 紅色,綠色,藍色 轉成 JSON 字符串
 */
String[] colors={"紅色","藍色","綠色"};

// JSONArray 存入 colors 
try{
    JSONArray jsonArray=new JSONArray(colors);
    System.out.println(jsonArray.toString());
} catch (JSONException e){
    e.printStackTrace();
}

 

Java之Json和數組、字符串、對象之間的轉換git

// 一、字符串和對象轉換爲Json
JSONObject jsonStr = JSONObject.fromObject(String);

// 二、數組轉換爲Json
JSONArray.fromObject(Array[])

// 三、Json轉換成字符串,使用toString()方法便可

//四、Json轉換成對象
JSONObject.toBean(json);

 

如何將JSON數組轉換爲普通Java數組?github

ArrayList<String> list = new ArrayList<String>();     
JSONArray jsonArray = (JSONArray)jsonObject; 
if (jsonArray != null) { 
   int len = jsonArray.length();
   for (int i=0;i<len;i++){ 
    list.add(jsonArray.get(i).toString());
   } 
} 

或者apache

// 若是尚未JSONArray對象,調用
JSONArray jsonArray = new JSONArray(jsonArrayString);

//而後簡單地循環遍歷,構建本身的數組。
List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
    list.add( jsonArray.getString(i) );
}

 

JSON & GSON - 讀取 JSON 文件json

讀前須要瞭解數組

首先我用到Apache Common IO 2.5包java-JSON包app

一、針對小JSON文件

{
  "name": "ALemon",
  "age": 24.2,
  "car": null,
  "major":["敲代碼","學習"],
  "Nativeplace": {
  "city": "廣州",
  "country": "China"
  }
}

思路過程:ide

  1. 獲取文件
  2. 獲取文件內容
  3. 轉換爲 JSON 對象
  4. 讀取 JSON 對象
import org.apache.commons.io.FileUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
 
public class Demo {
 
    public static void main(String args[]) throws IOException {
 
        File file=new File("mejson");
        String content= FileUtils.readFileToString(file,"UTF-8");
        JSONObject jsonObject=new JSONObject(content);
        System.out.println("姓名是:"+jsonObject.getString("name"));
        System.out.println("年齡:"+jsonObject.getDouble("age"));
        System.out.println("學到的技能:"+jsonObject.getJSONArray("major"));
        System.out.println("國家:"+jsonObject.getJSONObject("Nativeplace").getString("country"));
 
    }
}

 

二、針對大JSON文件

若是您的JSON很小,那麼對象模型很好,由於您能夠加載全部數據並做爲普通Java對象工做。當文件很是大時,您可能不想加載它所有進入內存。post

所以流和對象模型之間混合使用模式我的以爲是最佳選擇。

Json文件由數組Person對象造成。每一個人都有的id,name,married狀態和名單sons和daughters:

[
  {
    "id" : 0,
    "married" : true,
    "name" : "George Moore",
    "sons" : null,
    "daughters" : [
      {
        "age" : 25,
        "name" : "Elizabeth"
      },
      {
        "age" : 28,
        "name" : "Nancy"
      },
      {
        "age" : 9,
        "name" : "Sandra"
      }
    ]
  },
  ...
]

Person 類

public class Person {
    private int id;
    private String name;
    private boolean married;
    ...
 
    // Getter/Setter methods
    ...
 
    @Override
    public String toString() {
        return "Person{" + "id=" + id + ", name=" + name + ... + '}';
    }
}

咱們在這裏要作的是在流和對象模型之間使用混合模式。咱們將以流模式讀取文件,每次咱們找到一我的物對象時,咱們將使用對象模型裝配,重複該過程,直到找到所需的對象。

public static void readStream() {
    try {
        JsonReader reader = new JsonReader(new InputStreamReader(stream, "UTF-8"));
        Gson gson = new GsonBuilder().create();
 
        // Read file in stream mode
        reader.beginArray();
        while (reader.hasNext()) {
            // Read data into object model
            Person person = gson.fromJson(reader, Person.class);
            if (person.getId() == 0 ) {
                System.out.println("Stream mode: " + person);
                break;
            }
        }
        reader.close();
    } catch (UnsupportedEncodingException ex) {
        ...
    } catch (IOException ex) {
        ...
    }
}

Ps:JsonReader 須要引入 Gson包。

使用這種方法,咱們將全部對象一個接一個地加載到內存而不是整個文件。

其中 stream 爲目標文件stream對象。 Gson 的 API 使用能夠自行查詢。

此外,若是想一次將json中的內容裝配到Person數組中,能夠經過如下方法實現。但此方法會消耗較多的內存

public static void readDom() {
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new FileReader(file));
        Gson gson = new GsonBuilder().create();
        Person[] people = gson.fromJson(reader, Person[].class);
 
        System.out.println("Object mode: " + people[0]);
 
    } catch (FileNotFoundException ex) {
        ...
    } finally {
        ...
    }
}

 

 

 

2、com.google.gson

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

 

JsonParser jsonParser = new JsonParser();
JsonObject jsonObject = (JsonObject)jsonParser.parse(content);

 

Gson介紹

Gson解析json文件

$Java-json系列(一):用GSON解析Json格式數據

 

一、針對小JSON文件

  1.  
    {
  2.  
    "name": "ALemon",
  3.  
    "age": 24.2,
  4.  
    "car": null,
  5.  
    "major":[ "敲代碼", "學習"],
  6.  
    "Nativeplace": {
  7.  
    "city": "廣州",
  8.  
    "country": "China"
  9.  
    }
  10.  
    }

思路過程:

  1. 獲取文件
  2. 獲取文件內容
  3. 轉換爲 JSON 對象
  4. 讀取 JSON 對象
  1.  
    import org.apache.commons.io.FileUtils;
  2.  
    import org.json.JSONException;
  3.  
    import org.json.JSONObject;
  4.  
    import java.io.File;
  5.  
    import java.io.IOException;
  6.  
     
  7.  
    public class Demo {
  8.  
     
  9.  
    public static void main(String args[]) throws IOException {
  10.  
     
  11.  
    File file= new File( "mejson");
  12.  
    String content= FileUtils.readFileToString(file, "UTF-8");
  13.  
    JSONObject jsonObject= new JSONObject(content);
  14.  
    System.out.println( "姓名是:"+jsonObject.getString( "name"));
  15.  
    System.out.println( "年齡:"+jsonObject.getDouble( "age"));
  16.  
    System.out.println( "學到的技能:"+jsonObject.getJSONArray( "major"));
  17.  
    System.out.println( "國家:"+jsonObject.getJSONObject( "Nativeplace").getString( "country"));
  18.  
     
  19.  
    }
  20.  
    }
相關文章
相關標籤/搜索