欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用JSONObject生成和解析json的方法

 更新時(shí)間:2017年06月26日 09:22:32   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇使用JSONObject生成和解析json的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

1. json數(shù)據(jù)類型

類型 描述
Number 數(shù)字型
String 字符串型
Boolean 布爾型
Array 數(shù)組
Object 對(duì)象
null 空值

(1)json中不區(qū)分整數(shù)、小數(shù)等類型,而統(tǒng)一使用Number來(lái)存儲(chǔ)數(shù)字。

(2)Array表示數(shù)組,以中括號(hào)"[]"括起來(lái),元素之間以逗號(hào)分隔,元素可以為任意類型。

(3)Object表示對(duì)象,類似于C語(yǔ)言中的結(jié)構(gòu)體,以花括號(hào)"{}"括起來(lái),其元素要求為鍵值對(duì),key必須為String類型的,而value則可為任意類型。key和value之間以":"表示映射關(guān)系,元素之間也是以逗號(hào)分隔。

(4)String、Boolean、null與Java中一樣,這里不再贅述。

2. 構(gòu)建json

使用JSONObject需要引用org.json包,推薦通過(guò)maven引用,

溫馨提示:我在構(gòu)建maven項(xiàng)目的時(shí)候?qū)覍覄?chuàng)建失敗,在網(wǎng)上查了很久還是搞不定,后來(lái)科學(xué)上網(wǎng)就搞定了,如果你也創(chuàng)建失敗,可以嘗試一下。

2.1 直接構(gòu)建

JSONObject obj = new JSONObject();
obj.put(key, value);

直接構(gòu)建即直接實(shí)例化一個(gè)JSONObject對(duì)象,而后調(diào)用其put()方法,將數(shù)據(jù)寫(xiě)入。put()方法的第一個(gè)參數(shù)為key值,必須為String類型,第二個(gè)參數(shù)為value,可以為boolean、double、int、long、Object、Map以及Collection等。當(dāng)然,double以及int等類型只是在Java中,寫(xiě)入到j(luò)son中時(shí),統(tǒng)一都會(huì)以Number類型存儲(chǔ)。

范例:

import org.json.JSONObject;

public class JSONObjectSample {

  public static void main(String[] args) {
    createJson();
  }

  private static void createJson() {
    JSONObject obj = new JSONObject();
    obj.put("name", "John");
    obj.put("sex", "male");
    obj.put("age", 22);
    obj.put("is_student", true);
    obj.put("hobbies", new String[] {"hiking", "swimming"});
    //調(diào)用toString()方法可直接將其內(nèi)容打印出來(lái)
    System.out.println(obj.toString());
  }

}

輸出結(jié)果為:

{"hobbies":["hiking","swimming"],"sex":"male","name":"John","is_student":true,"age":22}

這里可以看到,為了壓縮大小以便于更高效地傳輸,json把所有空格、換行符等空白符全部去掉了。如果想要直觀點(diǎn)看其內(nèi)容,可以用一些在線的json解析器看,例如:http://www.jsoneditoronline.org/

2.2 使用HashMap構(gòu)建

使用HashMap構(gòu)建json,實(shí)際上即先創(chuàng)建好一個(gè)HashMap對(duì)象并且將數(shù)據(jù)打包進(jìn)去,而后在創(chuàng)建JSONObject時(shí)將其作為一個(gè)參數(shù)傳進(jìn)去。

范例:

public class JSONObjectSample {

  public static void main(String[] args) {
    createJsonByMap();
  }

  private static void createJsonByMap() {
    Map<String, Object> data = new HashMap<String, Object>();
    data.put("name", "John");
    data.put("sex", "male");
    data.put("age", 22);
    data.put("is_student", true);
    data.put("hobbies", new String[] {"hiking", "swimming"});
    
    JSONObject obj = new JSONObject(data);
    System.out.println(obj.toString());
  }

}

2.3 使用JavaBean構(gòu)建

相較于前兩種方法,實(shí)際開(kāi)發(fā)中應(yīng)用JavaBean構(gòu)建json的情況更為常見(jiàn),因?yàn)檫@樣代碼的重用率更高。

范例:

JavaBean

public class PersonInfo {

  private String name;
  private String sex;
  private int age;
  private boolean isStudent;
  private String[] hobbies;
  
  public void setName(String name) {
    this.name = name;
  }
  public void setSex(String sex) {
    this.sex = sex;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public void setStudent(boolean isStudent) {
    this.isStudent = isStudent;
  }
  public void setHobbies(String[] hobbies) {
    this.hobbies = hobbies;
  }
    //getter不能少
  public String getName() {
    return name;
  }
  public String getSex() {
    return sex;
  }
  public int getAge() {
    return age;
  }
  public boolean isStudent() {
    return isStudent;
  }
  public String[] getHobbies() {
    return hobbies;
  }
}

main:

import org.json.JSONObject;

public class JSONObjectSample {

  public static void main(String[] args) {
    createJsonByJavaBean();
  }

  private static void createJsonByJavaBean() {
    PersonInfo info = new PersonInfo();
    info.setName("John");
    info.setSex("male");
    info.setAge(22);
    info.setStudent(true);
    info.setHobbies(new String[] {"hiking", "swimming"});
    
    JSONObject obj = new JSONObject(info);
    System.out.println(obj);
  }

}

需要注意一點(diǎn),JavaBean一定要有g(shù)etter方法,否則會(huì)無(wú)法訪問(wèn)存儲(chǔ)的數(shù)據(jù)。

3. 解析json

解析json主要是基本類型如Number、boolean等,與數(shù)組Array。

基本類型的解析直接調(diào)用JSONObject對(duì)象的getXxx(key)方法,如果獲取字符串則getString(key),布爾值則getBoolean(key),以此類推。

數(shù)組的解析稍微麻煩一點(diǎn),需要通過(guò)JSONObject對(duì)象的getJSONArray(key)方法獲取到一個(gè)JSONArray對(duì)象,再調(diào)用JSONArray對(duì)象的get(i)方法獲取數(shù)組元素,i為索引值。

范例:

首先在工程目錄"src/main/java"下創(chuàng)建一個(gè)json文件,用于解析。

demo.json:

{
 "hobbies": [
  "hiking",
  "swimming"
 ],
 "sex": "male",
 "name": "John",
 "is_student": true,
 "age": 22
}

在pom.xml中加入對(duì)commons-io的依賴,以便于使用FileUtils進(jìn)行文件訪問(wèn):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>com.studying</groupId>
 <artifactId>myjson</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>

 <name>myjson</name>
 <url>http://maven.apache.org</url>

 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>

 <dependencies>
  <dependency>
   <groupId>org.json</groupId>
   <artifactId>json</artifactId>
   <version>20160810</version>
  </dependency>
  <!--加入對(duì)commons-io的依賴-->
  <dependency>
   <groupId>commons-io</groupId>
   <artifactId>commons-io</artifactId>
   <version>2.4</version>
  </dependency>
 </dependencies>
</project>

主類:

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.json.JSONArray;
import org.json.JSONObject;

public class JSONObjectSample {

  public static void main(String[] args) throws IOException {
    File file = new File("src/main/java/demo.json");
    String content = FileUtils.readFileToString(file);
    //對(duì)基本類型的解析
    JSONObject obj = new JSONObject(content);
    System.out.println("name:" + obj.getString("name"));
    System.out.println("sex:" + obj.getString("sex"));
    System.out.println("age" + obj.getInt("age"));
    System.out.println("is_student" + obj.getBoolean("is_student"));
    //對(duì)數(shù)組的解析
    JSONArray hobbies = obj.getJSONArray("hobbies");
    System.out.println("hobbies:");
    for (int i = 0; i < hobbies.length(); i++) {
      String s = (String) hobbies.get(i);
      System.out.println(s);
    }
  }
}

以上這篇使用JSONObject生成和解析json的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java常見(jiàn)啟動(dòng)命令-jar、-server和-cp詳細(xì)比較

    Java常見(jiàn)啟動(dòng)命令-jar、-server和-cp詳細(xì)比較

    這篇文章主要給大家介紹了關(guān)于Java常見(jiàn)啟動(dòng)命令-jar、-server和-cp詳細(xì)比較的相關(guān)資料,該文總結(jié)了常歸的jar包的啟動(dòng)方式,并分析各種啟動(dòng)方式的區(qū)別,需要的朋友可以參考下
    2023-07-07
  • JAVA操作XML實(shí)例分析

    JAVA操作XML實(shí)例分析

    這篇文章主要介紹了JAVA操作XML的方法,實(shí)例分析了java操作XML文件的常用技巧,需要的朋友可以參考下
    2015-03-03
  • java格式化時(shí)間示例

    java格式化時(shí)間示例

    這篇文章主要介紹了java格式化時(shí)間示例,需要的朋友可以參考下
    2014-04-04
  • Java刪除指定文件夾下的所有內(nèi)容的方法(包括此文件夾)

    Java刪除指定文件夾下的所有內(nèi)容的方法(包括此文件夾)

    下面小編就為大家?guī)?lái)一篇Java刪除指定文件夾下的所有內(nèi)容的方法(包括此文件夾) 。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • javaweb前端向后端傳值的幾種方式總結(jié)(附代碼)

    javaweb前端向后端傳值的幾種方式總結(jié)(附代碼)

    javaweb是java開(kāi)發(fā)中的一個(gè)方向,下面這篇文章主要給大家介紹了關(guān)于javaweb前端向后端傳值的幾種方式的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • JAVA?ImageIO.read方法報(bào)錯(cuò)/無(wú)效問(wèn)題及解決

    JAVA?ImageIO.read方法報(bào)錯(cuò)/無(wú)效問(wèn)題及解決

    這篇文章主要介紹了JAVA?ImageIO.read方法報(bào)錯(cuò)/無(wú)效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java mongodb連接配置實(shí)踐

    Java mongodb連接配置實(shí)踐

    這篇文章主要介紹了Java mongodb連接配置實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Scala中如何中斷循環(huán)詳解

    Scala中如何中斷循環(huán)詳解

    在Scala中,可以使用break和continue語(yǔ)句來(lái)中斷循環(huán)。break語(yǔ)句可以在滿足某個(gè)條件時(shí)中斷循環(huán),而continue語(yǔ)句可以在滿足某個(gè)條件時(shí)跳過(guò)當(dāng)前循環(huán)迭代,直接執(zhí)行下一次迭代
    2023-04-04
  • spring boot實(shí)現(xiàn)超輕量級(jí)網(wǎng)關(guān)的方法(反向代理、轉(zhuǎn)發(fā))

    spring boot實(shí)現(xiàn)超輕量級(jí)網(wǎng)關(guān)的方法(反向代理、轉(zhuǎn)發(fā))

    這篇文章主要介紹了spring boot實(shí)現(xiàn)超輕量級(jí)網(wǎng)關(guān)(反向代理、轉(zhuǎn)發(fā))的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java中Map的computeIfAbsent方法詳解

    Java中Map的computeIfAbsent方法詳解

    這篇文章主要介紹了Java的Map中computeIfAbsent方法詳解,在jdk1.8中Map接口新增了一個(gè)computeIfAbsent方法,這是Map接口中的默認(rèn)實(shí)現(xiàn)該方法是首先判斷緩存Map中是否存在指定的key的值,如果不存在,會(huì)調(diào)用mappingFunction(key)計(jì)算key的value,需要的朋友可以參考下
    2023-11-11

最新評(píng)論