import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;
Java中json的構造和解析,下載html
JSONObject json=new JSONObject(); json.put("Article_id", "66496");
/* 題目: 將顏色數組 紅色,綠色,藍色 轉成 JSON 字符串 */ String[] colors={"紅色","藍色","綠色"}; // JSONArray 存入 colors try{ JSONArray jsonArray=new JSONArray(colors); System.out.println(jsonArray.toString()); } catch (JSONException e){ e.printStackTrace(); }
// 一、字符串和對象轉換爲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) ); }
讀前須要瞭解數組
首先我用到Apache Common IO 2.5包和java-JSON包app
{ "name": "ALemon", "age": 24.2, "car": null, "major":["敲代碼","學習"], "Nativeplace": { "city": "廣州", "country": "China" } }
思路過程:ide
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很小,那麼對象模型很好,由於您能夠加載全部數據並做爲普通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 { ... } }
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);
$Java-json系列(一):用GSON解析Json格式數據
思路過程: