如何从JSONObject删除nameValuePairs密钥?

我正在开发一个Android项目,该项目需要JSONObject作为POST请求的主体。放置JSON的键和值后,我得到了以下代码行:

{

"xxxx":"zzzzzzz",

"yyyy":"uuuuuuu"

}

但是服务器得到以下信息:

{

"name_value_pairs": {

"xxxx":"zzzzzzz",

"yyyy":"uuuuuuu"

}

}

我已经尝试过JSONStringer,但是它的帮助并不大,因为Content-Type的请求是application/json

我不尝试构造JSONObject,因为已经通过使用以下代码行(由@osayilgan给出的代码)完成了此操作:

JSONObject jsonRequest = new JSONObject();

jsonRequest.put("xxxx", "zzzzzzz");

jsonRequest.put("yyyy", "uuuuuuu");

这不是问题。下述接口用于与服务器通信。

public interface MyService {

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

"Accept: */*"})

@POST("/test")

void testFunction(@Body JSONObject jsonObject, Callback<Response> callback);

}

服务器收到带有第二个JSON作为Body的请求,这令人失望。我注意到该键name_value_pairs会自动添加到对象中。

有人知道我该如何解决吗?

回答:

默认情况下,翻新使用GSON将HTTP正文与JSON相互转换。用@Body注释指定的对象将传递给GSON进行序列化,该序列化基本上将JAVA对象转换为JSON表示形式。此JSON表示形式将是HTTP请求正文。

JSONObject通过name将所有键值映射存储在成员变量中nameValuePairs。这是JSONObject实现的摘录:

public class JSONObject {

...

private final Map<String, Object> nameValuePairs;

...

}

当您将JSONObject传递给@Body批注时,将对这个JSONObject进行序列化,因此HTTP请求正文包含:{“ nameValuePairs”:“

actual JSON Object”}。

将实际的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<Response> callback);

}

// Usage

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

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

建议的解决方案之一是使用TypedInput:

public interface MyService {

@POST("/test")

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

}

String json = jsonRequest.toString();

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

myService.postRawJson(in, callback);

以上是 如何从JSONObject删除nameValuePairs密钥? 的全部内容, 来源链接: utcz.com/qa/430321.html

回到顶部