【问题标题】:How can I parse Json which starts with "/" in android using volley?如何使用 volley 在 android 中解析以“/”开头的 Json?
【发布时间】:2019-11-25 23:39:32
【问题描述】:

我正在从 URl 解析 json 数据,但它以“/”开头。 我有一个数据类,它是应用程序中的 POJO 类。 这是我的 json 文件。

/{
    "data": [
        {
            "id": "1",
            "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
        },
        {
            "id": "2",
            "text": "Felis donec et odio pellentesque diam volutpat commodo sed. Non arcu risus quis varius quam quisque. Nibh nisl condimentum id venenatis a condimentum vitae. Vel pharetra vel turpis nunc eget. "
        },
        {
            "id": "3",
            "text": "Volutpat sed cras ornare arcu dui vivamus arcu felis bibendum. Lobortis mattis aliquam faucibus purus in. Aliquam sem fringilla ut morbi tincidunt augue interdum."
        }
    ]
}

这是我的安卓代码。

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, urlJsonObj, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Toast.makeText(MainActivity.this, response.toString(), Toast.LENGTH_SHORT).show();


                try {
                    Toast.makeText(MainActivity.this, "Here", Toast.LENGTH_SHORT).show();
                    Gson gson = new Gson();
                    JSONObject data1 = response.getJSONObject("data");
                    data = gson.fromJson(data1.toString(), Data.class);

                }
                catch (JSONException e){
                    Toast.makeText(MainActivity.this, "Error : "+ e.getMessage(), Toast.LENGTH_SHORT).show();
                }
                dataList.add(data);
                mAdapter = new ViewPagerAdapter(dataList,layoutInflater, viewPager2);

                progressBar.setVisibility(View.GONE);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
                progressBar.setVisibility(View.GONE);
            }
        });
        requestQueue.add(jsonObjectRequest);

我收到错误消息“字符 0 处的预期文字值。

【问题讨论】:

  • 那不是 JSON。如果您知道从字符 1 到结尾的所有内容 有效 JSON,则只需在解析前取 .substring(1)
  • 我将此 JSON 文件解析为 JsonObject。在解析之前我应该​​把 .substring(1) 放在哪里?
  • 你不能。 JsonObjectRequest 假设您实际上正在获取 JSON。您必须创建一个StringRequest,从响应中获取一个字符串,将其子串化,然后自己解析它。在这样的事情上指向JsonObjectRequest 是残忍的,就像给一个无家可归的人罐装金枪鱼然后想知道他为什么不吃东西。 :P
  • 你是对的。明白了,谢谢

标签: android json gson android-volley


【解决方案1】:

在解析对象之前,只需从 json 中删除“/”。

String jsonString = response.toString();
if (jsonString.contains("/"))
   jsonString.replace("/","");

解析之后

 Gson gson = new Gson();
 JSONObject data1 = jsonString.getJSONObject("data");
 data = gson.fromJson(data1.toString(), Data.class);

希望对你有帮助!

【讨论】:

  • 这将删除 JSON 中的所有斜杠。您只想删除实际 JSON 之外的前导。
  • @Ridcully 是的,谢谢你认识我,我编辑了我的帖子。
【解决方案2】:

如果您只想删除第一个斜线,请使用:

if (jsonString.substring(0, 1).equals("/") {
    jsonString = jsonString.substring(1);
}

【讨论】:

    【解决方案3】:

    只需通过以下方式从响应中删除“/”:

    String subString = (respnse.tostring).replace("/","");
    JSONobject jsonObj = new JSONobject(subString);
    Gson gson = new Gson();
    JSONObject data1 = jsonObj.getJSONObject("data");
    data = gson.fromJson(data1.toString(), Data.class);
    

    希望对你有帮助

    【讨论】:

    • 希望对您有所帮助!
    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多