当前位置: 首页 > 知识库问答 >
问题:

如何在改型中处理动态JSON?

安毅
2023-03-14
{
   "applicationType":"1",
   "responseMessage":{
      "surname":"Jhon",
      "forename":" taylor",
      "dob":"17081990",
      "refNo":"3394909238490F",
      "result":"Received"
   }

}
 {
       "applicationType":"4",
       "responseMessage":"Success"          
 }
void doTrackRef(Map<String, String> paramsref2) {
    RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint("http://192.168.100.44/RestDemo").build();



    TrackerRefRequest userref = restAdapter.create(TrackerRefRequest.class);
    userref.login(paramsref2,
            new Callback<TrackerRefResponse>() {
                @Override
                public void success(
                        TrackerRefResponse trackdetailresponse,
                        Response response) {

                    Toast.makeText(TrackerActivity.this, "Success",
                    Toast.LENGTH_SHORT).show();

                }

                @Override
                public void failure(RetrofitError retrofitError) {


                    Toast.makeText(TrackerActivity.this, "No internet",
                        Toast.LENGTH_SHORT).show();
                }


            });
}

POJO:

public class TrackerRefResponse {


private String applicationType;

    private String responseMessage;          //String type

//private ResponseMessage responseMessage;  //Object of type ResponseMessage

//Setters and Getters


}

在上面的代码POJO TrackerRefResponse.java前缀responseMessage被设置为responseMessage类型的string或object,所以我们可以用同名的ref变量(java basics:)创建POJO,所以我正在为Referfit中的dynamicJSON寻找相同的解决方案。我知道这在带有异步任务的普通http客户端中非常容易,但这不是REST-APIJSON解析的最佳实践!查看性能基准测试总是Volley或Referfit是最好的选择,但我没有处理dynamicJSON

我知道可能的解决办法

尝试说服RESTapi后端开发人员。

创建自定义翻新客户端:)

共有1个答案

翁和正
2023-03-14

派对迟到了,但你可以用转换器。

RestAdapter restAdapter = new RestAdapter.Builder()
    .setEndpoint("https://graph.facebook.com")
    .setConverter(new DynamicJsonConverter()) // set your static class as converter here
    .build();

api = restAdapter.create(FacebookApi.class);

然后使用一个静态类来实现Retrofit的转换器:

static class DynamicJsonConverter implements Converter {

    @Override public Object fromBody(TypedInput typedInput, Type type) throws ConversionException {
        try {
            InputStream in = typedInput.in(); // convert the typedInput to String
            String string = fromStream(in);
            in.close(); // we are responsible to close the InputStream after use

            if (String.class.equals(type)) {
                return string;
            } else {
                return new Gson().fromJson(string, type); // convert to the supplied type, typically Object, JsonObject or Map<String, Object>
            }
        } catch (Exception e) { // a lot may happen here, whatever happens
            throw new ConversionException(e); // wrap it into ConversionException so retrofit can process it
        }
    }

    @Override public TypedOutput toBody(Object object) { // not required
        return null;
    }

    private static String fromStream(InputStream in) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        StringBuilder out = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            out.append(line);
            out.append("\r\n");
        }
        return out.toString();
    }
}

我编写了这个示例转换器,以便它以String、Object、JsonObject或map 的形式返回Json响应。显然,并不是所有的返回类型都适用于每个Json,而且肯定有改进的空间。但是它演示了如何使用转换器将几乎所有响应转换为动态JSON。

 类似资料:
  • 问题内容: 我正在使用改造高效的网络库,但无法处理包含单个前缀的Dynamic JSON,该前缀 会随机更改,在某些情况下(动态),相同的前缀()会更改为String。 Json格式的responseMessage对象: Json格式会动态更改为字符串类型: 我的问题是,由于改造具有内置的解析,我必须为每个请求分配单个POJO!但是不幸的是,REST-API是基于动态响应构建的。前缀将在 成功(…

  • 当没有数据avilable时,它返回以下JSON: http://www.omdbapi.com/?t=asdasdas

  • 全部的 我是骆驼的开胃菜。我有一些问题。这里有一个场景。 文件正文中有2个字段。(seq, date, OR no.)所以,我为这个数据格式生成了pojo类。 我申请了骆驼队。几天后,关于添加名称字段,dataformat发生了更改。 所以,我们需要修改pojo类并再次重建应用程序。但我们不想再次构建应用程序并为dataformat生成pojo类。 如果我们可以在运行时使用xsd动态生成Pojo类

  • 我的服务器为所有请求返回一个基本的JSON结构,如下所示: 其中可以是true或false,数据可以返回许多内容,从到应用程序可能需要的数据。 需要更改/添加到我的改型API调用中的内容是什么?

  • 可以在页面对象模型中处理动态元素吗? 例子: 我想从测试方法中传递输入的name属性值。

  • 我想动态地从EditText中获取值...当用户按下添加按钮时,我生成了很多EditText...当用户按下添加按钮时,它每次都会生成3个Edittext。我不知道如何从这个动态生成的EdiTtext中获取值。现在我的问题是如何从每行的3个Edittext中获取值。我还需要验证用户是否删除了视图。请帮助我是新的android开发。当用户按下保存按钮时,应该会发生这种情况。提前谢谢! 这是课堂。 这