android清空json,android – 如何从JSONObject中删除nameValuePairs键?

问题:

默认情况下改造使用GSON将HTTP主体转换为JSON和从JSON转换.使用@Body注释指定的对象将被传递给GSON进行序列化,其基本上将JAVA对象转换为JSON表示.这个JSON表示将是HTTP请求体.

JSONObject通过名称nameValuePairs将所有键值映射存储在成员变量中.

以下是JSONObject实现的摘录:

public class JSONObject {

...

private final Map nameValuePairs;

...

}

当您将JSONObject传递给@Body注释时,此JSONObject被排除,因此HTTP请求体包含:{“nameValuePairs”:“实际JSON对象”}.

解:

将实际的JAVA对象传递给@Body注释,而不是对应的JSONObject. GSON将负责将其转换为JSON表示.

例如

class HTTPRequestBody {

String key1 = "value1";

String key2 = "value2";

...

}

// GSON will serialize it as {"key1": "value1", "key2": "value2"},

// which will be become HTTP request body.

public interface MyService {

@Headers({"Content-type: application/json",

"Accept: */*"})

@POST("/test")

void postJson(@Body HTTPRequestBody body, Callback callback);

}

// Usage

MyService myService = restAdapter.create(MyService.class);

myService.postJson(new HTTPRequestBody(), callback);

替代方案:

如果您仍然想将原始JSON作为HTTP请求体发送,请按照Retrofit author here提到的解决方案.

其中一个建议的解决方案是使用TypedInput:

public interface MyService {

@POST("/test")

void postRawJson(@Body TypedInput body, Callback callback);

}

String json = jsonRequest.toString();

TypedInput in = new TypedByteArray("application/json", json.getBytes("UTF-8"));

myService.postRawJson(in, callback);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值