一、org.json
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;
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(); }
// 1、字符串和对象转换为Json JSONObject jsonStr = JSONObject.fromObject(String); // 2、数组转换为Json JSONArray.fromObject(Array[]) // 3、Json转换成字符串,使用toString()方法即可 //4、Json转换成对象 JSONObject.toBean(json);
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()); } }
或者
// 如果还没有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) ); }
读前需要了解
- java-IO 基础知识
- java-File了解
- 推荐一篇博文:使用FileUtils简化你的文件操作
首先我用到Apache Common IO 2.5包和java-JSON包
1、针对小JSON文件
{ "name": "ALemon", "age": 24.2, "car": null, "major":["敲代码","学习"], "Nativeplace": { "city": "广州", "country": "China" } }
思路过程:
- 获取文件
- 获取文件内容
- 转换为 JSON 对象
- 读取 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")); } }
2、针对大JSON文件
如果您的JSON很小,那么对象模型很好,因为您可以加载所有数据并作为普通Java对象工作。当文件非常大时,您可能不想加载它全部进入内存。
因此流和对象模型之间混合使用模式个人觉得是最佳选择。
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 { ... } }
二、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);
$Java-json系列(一):用GSON解析Json格式数据
1、针对小JSON文件
思路过程:
- 获取文件
- 获取文件内容
- 转换为 JSON 对象
- 读取 JSON 对象