json字符串,json對象

一、語言的數據類型前端

雖然數據在底層都以字節的形式運算、存儲和傳輸,但爲了程序易於理解,全部的高級語言都有本身的數據類型,好比字符串、數字、布爾等。java

對於面向對象的語言,幾乎都有「對象」這個封裝類型,這個抽象的類型只限於本身語言以內解析,好比Java對象之與JVM,js對象之與瀏覽器等。web

數據在跨平臺交互時,離不開"字符串」這個類型,爲了解析效率和易讀性,字符串每每都有必定的格式,好比字符串中使用「&」分隔符,到後來業界有了xml、json等。spring

二、Json字符串與Json對象json

Json只是一種數據格式,沒有語言之分,字符串和對象是兩種不一樣的數據類型。後端

2.一、Javascript下的Json瀏覽器

var person1 = '{ "name": "wangxu", "age": 27 }'; //字符串類型
var person2 = { "name": "wangxu ", "age": 27 }; //對象類型,比上面少了引號spring-mvc

若是person1不進行類型轉換,想取age值,只能使用js的split或者substring,這顯然是反人類的。mvc

但想取person2的age,直接使用person2.age便可,這就是語言「對象」類型的魔力。app


Json格式的js字符串類型與對象類型的轉換

字符串-->對象:

person2=JSON.parse(person1);
或者 eval('('+person1+')')
對象-->字符串:

person1=JSON.stringify(person2)
  

2.二、Java下的Json

Json格式的Java字符串類型與對象類型及其轉換以下:

public class TestJsonConvert {
 
 public static void main(String[] args) {
  //字符串
  String person1="{\"name\":\"wangxu\",\"age\":27}";
  //對象
  Person person2=new Person("wangxu",27);
  //轉換:字符串-->對象
  person2=com.alibaba.fastjson.JSON.parseObject(person1, Person.class);
  //轉換:對象-->字符串
  person1=com.alibaba.fastjson.JSON.toJSONString(person2);
 }
 
 static class Person { 
  private String name; 
  private Integer age;
  public Person() { } 
  public Person(String name, Integer age) { 
   this.name = name;  this.age = age;
  }
  public String getName() {  return name; } 
  public void setName(String name) {  this.name = name; } 
  public Integer getAge() {  return age; } 
  public void setAge(Integer age) {  this.age = age; }} 
}
2.三、瀏覽器與Java web的Json交換

瀏覽器到後臺:將Json格式的js對象轉換成js字符串後發送,servlet接收後再將字符串轉換成Java對象。

後臺到瀏覽器:將Json格式的Java對象轉換成字符串後輸出,瀏覽器接受字符串後,能夠將其轉換成js對象類型。

關於java web輸出json字符串的簡單總結:[
java web返回json無外乎最原始的輸出,和使用框架封裝自動輸出

1、使用HttpServletResponse直接輸出

  method以下:

/**
  * 直接使用HttpServletResponse輸出json串
  * 
  * @param
  * @return
  * @throws IOException 
  */
 public void getJson(HttpServletResponse response) throws IOException {
        reresponse.setCharacterEncoding("utf-8");
        response.setContentType("application/json;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Object obj=new Object();//JavaBean
        String json=JSON.toJSONString(obj); //這裏使用阿里的fastjson
        out.print(json);
        out.flush();
        out.close();
 }
  

2、使用框架自動將JavaBean轉成Json輸出

這裏列舉spring mvc3的實現方式,須要引入對應的jackson包

i)、請求method添加@ResponseBody後直接返回JavaBean對象以下

/**
  * 使用@ResponseBody返回json
  * spring 調用jackson將Object自動轉json並輸出 
  * @param
  * @return 
  * @throws IOException
  */
 @RequestMapping(value = "/json", method = RequestMethod.GET)
 @ResponseBody
 public Object getJson(HttpServletResponse response) throws IOException {
  Object obj = new Object();// JavaBean
  return obj;
 }
ii)、spring-mvc.xml的配置以下

<!-- 請求方法映射 -->
 <mvc:annotation-driven
  ignore-default-model-on-redirect="true">
  <!-- 識別@ResponseBody後,將javaBean自動轉json -->
  <mvc:message-converters>
   <bean
    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="supportedMediaTypes">
     <list>
      <value>application/json;charset=UTF-8</value>
     </list>
    </property>
   </bean>
  </mvc:message-converters>
 </mvc:annotation-driven>
]

注意事項:

前端Ajax請求後端返回Json時,注意至少有一端要設置數據格式爲Json,否則返回的data默認是"Json字符串",還得手工轉換成「Json對象」

前臺請求時設置 dataType:"json";

後臺響應時設置 response.setContentType("application/json;charset=UTF-8");

相關文章
相關標籤/搜索