json用法

本文详细介绍了在使用Jackson库处理JSON对象时,如何解决日期输出为时间戳的问题,并提供了自定义日期格式的方法,包括普通方式、使用注释方式以及自定义日期格式类的实现。
近日,使用Jackson转化JSON对象的时候,显示的时候,日期始终显示不正确,输出的日期是一串数字代表的时间戳,不符合要求,所以想到Jackson应当有方法设置输出的日期格式。后来一查果然有两种方式来实现: 

1.普通的方式: 

默认是转成timestamps形式的,通过下面方式可以取消timestamps。 

Java代码 
objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);  

objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false); 这样将使时间生成使用所谓的use a [ISO-8601 ]-compliant notation, 输出类似如下格式的时间: "1970-01-01T00:00:00.000+0000". 

当然也可以自定义输出格式: 

Java代码 
objectMapper.getSerializationConfig().setDateFormat(myDateFormat);  

objectMapper.getSerializationConfig().setDateFormat(myDateFormat); 
Java代码 
myDateFormat对象为java.text.DateFormat,具体使用清查java API  

myDateFormat对象为java.text.DateFormat,具体使用清查java API2.annotaion的注释方式: 

先定义自己需要的格式,例如: 

Java代码 
import java.io.IOException;   
import java.text.SimpleDateFormat;   
import java.util.Date;   
import org.codehaus.jackson.JsonGenerator;   
import org.codehaus.jackson.JsonProcessingException;   
import org.codehaus.jackson.map.JsonSerializer;   
import org.codehaus.jackson.map.SerializerProvider;   
  
/**  
*  java日期对象经过Jackson库转换成JSON日期格式化自定义类  
* @author godfox  
* @date 2010-5-3  
*/  
public class CustomDateSerializer extends JsonSerializer<Date> {   
  
        @Override  
        public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {   
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");   
                String formattedDate = formatter.format(value);   
                jgen.writeString(formattedDate);   
        }   
}  

import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import org.codehaus.jackson.JsonGenerator; 
import org.codehaus.jackson.JsonProcessingException; 
import org.codehaus.jackson.map.JsonSerializer; 
import org.codehaus.jackson.map.SerializerProvider; 

/** 
*  java日期对象经过Jackson库转换成JSON日期格式化自定义类 
* @author godfox 
* @date 2010-5-3 
*/ 
public class CustomDateSerializer extends JsonSerializer<Date> { 

        @Override 
        public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { 
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
                String formattedDate = formatter.format(value); 
                jgen.writeString(formattedDate); 
        } 
} 然后在你的POJO上找到日期的get方法 

Java代码 
@JsonSerialize(using = CustomDateSerializer.class)   
       public Date getCreateAt() {   
               return createAt;   
       }  




Java代码 
StringWriter sw = new StringWriter();   
JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);   
JacksonUtil.getInstance().writeValue(gen, jsonlist);   
gen.close();   
String finalInfo = sw.toString();   
System.out.println("finalinfo is:"+finalInfo ); 
<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) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值