JSON的用法

本文介绍如何使用JSON格式进行数据交互,包括JavaScript中的JSON操作、通过AJAX获取JSON数据及使用Java处理JSON请求的过程。展示了JSON数据的构造、解析以及与Web服务之间的通信。
  •     var user =    
  •     {    
  •         "username":"andy",   
  •         "age":20,   
  •         "info": { "tel": "123456", "cellphone": "98765"},   
  •         "address":   
  •             [   
  •                 {"city":"beijing","postcode":"222333"},   
  •                 {"city":"newyork","postcode":"555666"}   
  •             ]   
  •     }   
  •        
  •     alert(user.username);   
  •     alert(user.age);   
  •     alert(user.info.cellphone);   
  •     alert(user.address[0].city);   
  •     alert(user.address[0].postcode);   
  • }   
    1.  

    JSON

  •     var user =    
  •     {    
  •         "username":"andy",   
  •         "age":20,   
  •         "info": { "tel": "123456", "cellphone": "98765"},   
  •         "address":   
  •             [   
  •                 {"city":"beijing","postcode":"222333"},   
  •                 {"city":"newyork","postcode":"555666"}   
  •             ]   
  •     }   
  •        
  •     alert(user.username);   
  •     alert(user.age);   
  •     alert(user.info.cellphone);   
  •     alert(user.address[0].city);   
  •     alert(user.address[0].postcode);   
  •        
  •     user.username = "Tom";   
  •     alert(user.username);   
  • }   
    1.  
      JSON提供了 json.js包,下载 http://www.json.org/json.js 后,将其引入然后就可以简单的使用object. toJSONString()转换成 JSON数据。
    js 代码
    1. function showCar() {   
    2.     var carr = new Car("Dodge", "Coronet R/T", 1968, "yellow");   
    3.     alert(carr.toJSONString());   
    4. }   
    5.   
    6. function Car(make, model, year, color)       {   
    7.      this.make  =  make;   
    8.      this.model  =  model;   
    9.      this.year  =  year;   
    10.      this.color  =  color;   
    11. }   

    JSON

  •     var str = '{ "name": "Violet", "occupation": "character" }';   
  •     var obj = eval('(' + str + ')');   
  •     alert(obj.toJSONString());   
  • }   
    1.  

     

  •     var str = '{ "name": "Violet", "occupation": "character" }';   
  •     var obj = str.parseJSON();   
  •     alert(obj.toJSONString());   
  • }   
    1.  

    JSONajaxajax.JSONTest1.java));  

    1.  

    ajax

  •     var url = "/MyWebApp/JSONTest1";   
  •     var mailAjax = new Ajax.Request(   
  •         url,   
  •         {   
  •             method: 'get',   
  •             onComplete: jsonResponse   
  •         }   
  •     );   
  • }   
  •   
  • function jsonResponse(originalRequest) {   
  •     alert(originalRequest.responseText);   
  •     var myobj = originalRequest.responseText.parseJSON();   
  •     alert(myobj.name);   
  • }   
    1.  
    1.5.1.js JSON json.js, 修改上面的方法
    JSONjson.jar)
  •     alert(originalRequest.responseText);   
  •     var myobj = originalRequest.responseText.evalJSON(true);   
  •     alert(myobj.name);   
  • }   
    1.  
    JSON还提供了java的jar包 http://www. json.org/java/index.html API也很简单,下面举个例子
    在javascript中填加请求参数
    js 代码
    1. function sendRequest() {   
    2.     var carr = new Car("Dodge", "Coronet R/T", 1968, "yellow");   
    3.     var pars = "car=" + carr.toJSONString();   
    4.   
    5.     var url = "/MyWebApp/JSONTest1";   
    6.     var mailAjax = new Ajax.Request(   
    7.         url,   
    8.         {   
    9.             method: 'get',   
    10.             parameters: pars,   
    11.             onComplete: jsonResponse   
    12.         }   
    13.     );   
    14. }   
    使用 JSON 请求字符串就可以简单的生成JSONObject 并进行解析,修改

    void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {   

  •         String s3 = request.getParameter("car");   
  •         try {   
  •             JSONObject jsonObj = new JSONObject(s3);   
  •             System.out.println(jsonObj.getString("model"));   
  •             System.out.println(jsonObj.getInt("year"));   
  •         } catch (JSONException e) {   
  •             e.printStackTrace();   
  •         }   
  •         response.getWriter().print("{ /"name/": /"Violet/", /"occupation/": /"character/" }");   
  •     }   
    1.  
    同样可以使用JSONObject 生成 JSON 字符串,修改servlet
    java 代码
    1. private void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {   
    2.         String s3 = request.getParameter("car");   
    3.         try {   
    4.             JSONObject jsonObj = new JSONObject(s3);   
    5.             System.out.println(jsonObj.getString("model"));   
    6.             System.out.println(jsonObj.getInt("year"));   
    7.         } catch (JSONException e) {   
    8.             e.printStackTrace();   
    9.         }   
    10.            
    11.         JSONObject resultJSON = new JSONObject();   
    12.         try {   
    13.             resultJSON.append("name", "Violet")   
    14.                       .append("occupation", "developer")   
    15.                       .append("age", new Integer(22));   
    16.             System.out.println(resultJSON.toString());   
    17.         } catch (JSONException e) {   
    18.             e.printStackTrace();   
    19.         }   
    20.         response.getWriter().print(resultJSON.toString());   
    21.     }   
    js 代码
    1. function jsonResponse(originalRequest) {   
    2.     alert(originalRequest.responseText);   
    3.     var myobj = originalRequest.responseText.evalJSON(true);   
    4.     alert(myobj.name);   
    5.     alert(myobj.age);   
    6. }  
  •  
<think>好的,用户想了解requests库中处理JSON用法。我需要从基础开始,逐步解释如何使用requests发送和接收JSON数据。 首先,用户可能已经知道如何安装和导入requests库,但可能需要确认。所以应该先提到安装方法,比如pip install requests,然后导入。 接下来,发送JSON数据是常见需求。要说明如何构造数据,使用json参数,并强调不需要手动序列化。举个例子,比如发送POST请求到某个测试URL,数据是一个包含用户名和邮箱的字典。需要指出headers中的Content-Type会自动设置为application/json,这是requests自动处理的。 然后是处理响应中的JSON。当服务器返回JSON时,使用response.json()方法将其转换为Python字典。这里要提醒可能存在的异常处理,比如使用try-except块来捕获JSON解码错误,特别是当响应状态码不是200时。 另外,用户可能需要自定义请求头,比如修改Accept头部来指定期望的响应格式。需要给出一个例子,说明如何设置headers参数,并发送GET请求。 高级部分可以提到json模块的使用场景,比如处理复杂数据类型(如datetime对象),这时候需要自定义序列化方法。但大多数情况下,requests的json参数已经足够,不需要手动使用json.dumps。 最后,常见问题部分需要涵盖JSON解码错误和字符编码问题。提醒用户检查响应内容是否正确,以及正确设置编码。可能还要提到调试方法,比如打印response.text查看原始内容。 整个过程中要保持结构清晰,分步骤讲解,每个部分都给出代码示例,并解释注意事项。确保用户能够按照步骤实际操作,并理解潜在的问题和解决方法。同时,语言要简洁明了,避免过于技术化的术语,让初学者也能理解。</think>以下为requests库处理JSON数据的详细用法说明: 1. 安装与导入 ```python pip install requests # 首次使用需安装 import requests ``` 2. 发送JSON数据(POST请求) ```python url = "https://api.example.com/post" data = { "username": "张三", "email": "zhangsan@example.com" } # 使用json参数自动序列化 response = requests.post(url, json=data) # 等效手动序列化(不推荐) # headers = {'Content-Type': 'application/json'} # response = requests.post(url, data=json.dumps(data), headers=headers) ``` ✅ 自动设置Content-Type为application/json ✅ 自动将字典序列化为JSON格式 3. 接收JSON响应 ```python response = requests.get("https://api.example.com/data") if response.status_code == 200: try: data = response.json() # 自动反序列化为字典 print(f"用户ID: {data['user']['id']}") except requests.exceptions.JSONDecodeError: print("响应内容不是有效的JSON格式") ``` 4. 自定义请求头 ```python headers = { "Accept": "application/json", # 要求返回JSON格式 "Authorization": "Bearer your_token" } response = requests.get("https://api.example.com/items", headers=headers) ``` 5. 处理复杂数据类型 ```python from datetime import datetime payload = { "event": "会议", "time": datetime.now() } # 自定义序列化 import json class DateTimeEncoder(json.JSONEncoder): def default(self, o): if isinstance(o, datetime): return o.isoformat() return super().default(o) response = requests.post(url, data=json.dumps(payload, cls=DateTimeEncoder), headers={"Content-Type": "application/json"}) ``` 常见问题处理: 1. JSON解码错误: ```python try: data = response.json() except json.JSONDecodeError as e: print(f"解码失败:{e}") print(f"原始响应:{response.text}") ``` 2. 字符编码问题: ```python # 强制设置响应编码(当服务器未正确返回时) response.encoding = 'utf-8' data = response.json() ``` 调试技巧: ```python # 查看原始请求头 print(response.request.headers) # 查看发送的原始数据 print(response.request.body) # 查看完整响应内容 print(response.text) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值