Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
改装不解析Java对象的JSON请求_Java_Json_Retrofit_Retrofit2_Okhttp - Fatal编程技术网

改装不解析Java对象的JSON请求

改装不解析Java对象的JSON请求,java,json,retrofit,retrofit2,okhttp,Java,Json,Retrofit,Retrofit2,Okhttp,最近,我不得不向Pocket API发出一个JSON请求,以修改端点。在他们的网站上,编码的JSON数组应该是这样的: https://getpocket.com/v3/send?actions=%5B%7B%22action%22%3A%22archive%22%2C%22time%22%3A1348853312%2C%22item_id%22%3A229279689%7D%5D&access_token=[访问令牌]&消费者密钥=[消费者密钥] 第一种解决方案 我使用的是翻新库,我写的方法是

最近,我不得不向Pocket API发出一个JSON请求,以修改端点。在他们的网站上,编码的JSON数组应该是这样的:
https://getpocket.com/v3/send?actions=%5B%7B%22action%22%3A%22archive%22%2C%22time%22%3A1348853312%2C%22item_id%22%3A229279689%7D%5D&access_token=[访问令牌]&消费者密钥=[消费者密钥]

第一种解决方案 我使用的是翻新库,我写的方法是:

@Headers("X-Accept: application/json")
@FormUrlEncoded
@POST("v3/send")
Call<ModifyItem> modify(@Field("actions[]") ArrayList<String> actions,
                        @Field("access_token") String token,
                        @Field("consumer_key") String consumerKey);

class ModifyItem {
    public ArrayList<Boolean> action_results;
    public int status;
}
以及POJO课程:

public class Action implements Serializable {

@SerializedName("action")
@Expose
private String action;
@SerializedName("item_id")
@Expose
private String itemId;
@SerializedName("time")
@Expose
private String time;

public String getAction() {
    return action;
}

public void setAction(String action) {
    this.action = action;
}

public String getItemId() {
    return itemId;
}

public void setItemId(String itemId) {
    this.itemId = itemId;
}

public String getTime() {
    return time;
}

public void setTime(String time) {
    this.time = time;
}

@Override
public String toString() {
    return ToStringBuilder.reflectionToString(this);
}
}
但是JSON请求是这样的:
actions%5B%5D=com.deyanm.pocketapispike.data.Action%4075efc7d1%5Baction%3dcarchive%2CitemId%3D308680025%2Ctime%3D1505669208%5D&access\u-token=[access\u-token]和consumer\u-key=[consumer\u-key]


我的问题是,如何实现所需的JSON?谢谢两件事。首先,您的
Action
类需要一个适当的
toString()
方法

@覆盖
公共字符串toString(){
返回“{\”action\“=”+action+
“,\”项目id\“=”+项目id+
“,\“时间\=”+时间+“}”;
}
其次,需要将
操作
字段识别为单个对象,而不是字段列表,因此不要直接使用ArrayList,而是使用其toString()形式

调用modify(@Field(“actions”)字符串操作,
@字段(“访问令牌”)字符串令牌,
@字段(“消费者密钥”)字符串consumerKey);

然后,我不再使用
modify(actions,token,key)
而是使用
modify(actions.toString(),token,key)
谢谢您的回复,我稍微修改了toString方法,以满足所需的要求:
@重写公共字符串toString(){return“[{”action\:“+action+”,“time\:“+time+”,“item\u id:”+itemId+“}]”;}
一切正常!嗨,deyanm,如果这个Pocket帐户不仅仅是一个演示帐户,您可能需要从上面的问题中删除访问令牌和密钥。
public class Action implements Serializable {

@SerializedName("action")
@Expose
private String action;
@SerializedName("item_id")
@Expose
private String itemId;
@SerializedName("time")
@Expose
private String time;

public String getAction() {
    return action;
}

public void setAction(String action) {
    this.action = action;
}

public String getItemId() {
    return itemId;
}

public void setItemId(String itemId) {
    this.itemId = itemId;
}

public String getTime() {
    return time;
}

public void setTime(String time) {
    this.time = time;
}

@Override
public String toString() {
    return ToStringBuilder.reflectionToString(this);
}
}