【问题标题】:Convert string to JSON array将字符串转换为 JSON 数组
【发布时间】:2013-03-14 14:37:48
【问题描述】:

我有以下来自 Web 服务的 JSON 字符串,我正在尝试将其转换为 JSONarray

{
    "locations": [
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        }
    ]
}

我在网上验证了这个String,它似乎是正确的。现在我在android开发中使用以下代码来利用

JSONArray jsonArray = new JSONArray(readlocationFeed);

这会引发类型不匹配异常。

【问题讨论】:

  • readlocationFeed是什么数据类型?
  • @IgorGanapolsky,字符串

标签: java android json


【解决方案1】:

这里你得到 JSONObject 所以改变这一行:

JSONArray jsonArray = new JSONArray(readlocationFeed); 

以下内容:

JSONObject jsnobject = new JSONObject(readlocationFeed);

之后

JSONArray jsonArray = jsnobject.getJSONArray("locations");
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject explrObject = jsonArray.getJSONObject(i);
}

【讨论】:

  • 注意到 JSONObject 的构造函数看起来已经过时并且在 1.1.1 版本中不支持 String 作为参数
  • jsnobject 可能是 jsonobject - 拼写:)
【解决方案2】:

输入字符串

[
   {
      "userName": "sandeep",
      "age": 30
   }, 
   {
      "userName": "vivan",
      "age": 5
   }
]

将字符串转换为 JSON 的简单方法

public class Test
{

    public static void main(String[] args) throws JSONException
    {
        String data = "[{\"userName\": \"sandeep\",\"age\":30},{\"userName\": \"vivan\",\"age\":5}]  ";
        JSONArray jsonArr = new JSONArray(data);

        for (int i = 0; i < jsonArr.length(); i++)
        {
            JSONObject jsonObj = jsonArr.getJSONObject(i);

            System.out.println(jsonObj);
        }

    }
}

输出

{"userName":"sandeep","age":30}
{"userName":"vivan","age":5}

【讨论】:

    【解决方案3】:

    使用 json 库:-

    String data="[{"A":"a","B":"b","C":"c","D":"d","E":"e","F":"f","G":"g"}]";
    Object object=null;
    JSONArray arrayObj=null;
    JSONParser jsonParser=new JSONParser();
    object=jsonParser.parse(data);
    arrayObj=(JSONArray) object;
    System.out.println("Json object :: "+arrayObj);
    

    使用 GSON 库:-

    Gson gson = new Gson();
    String data="[{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":\"d\",\"E\":\"e\",\"F\":\"f\",\"G\":\"g\"}]";
    JsonParser jsonParser = new JsonParser();
    JsonArray jsonArray = (JsonArray) jsonParser.parse(data);
    

    【讨论】:

    • 这不适用于 Google GSON?你能帮忙吗?
    • @pashtika..请解释你的问题..然后我可以尝试。
    • @pashtika ..是的,您可以使用 GSON jar 并将您的字符串转换为 json
    • 第二个代码 sn-p 似乎有错误,因为 gson 对象已创建但未使用。
    • 忽略第一行。没有它也可以Gson gson = new Gson();
    【解决方案4】:

    您需要将给定字符串转换为JSONObject 而不是JSONArray,因为当前字符串包含JsonObject 作为根元素而不是JsonArray

    JSONObject jsonObject = new JSONObject(readlocationFeed);
    

    【讨论】:

      【解决方案5】:
      String b = "[" + readlocationFeed + "]";
      JSONArray jsonArray1 = new JSONArray(b);
      jsonarray_length1 = jsonArray1.length();
      for (int i = 0; i < jsonarray_length1; i++) {
      
      }
      

      或者转换成JSONOBJECT

      JSONObject jsonobj = new JSONObject(readlocationFeed);
      JSONArray jsonArray = jsonobj.getJSONArray("locations");
      

      【讨论】:

      • 字符串操作是从另一个方向思考的好方法——关于这个问题
      【解决方案6】:

      试试这段代码:

      try {        
          Log.e("log_tag", "Error in convert String" + result.toString());
          JSONObject json_data = new JSONObject(result);
      
          String status = json_data.getString("Status");
          {
              String data = json_data.getString("locations");
              JSONArray json_data1 = new JSONArray(data);
              for (int i = 0; i < json_data1.length(); i++) {
                  json_data = json_data1.getJSONObject(i);
      
                  String lat = json_data.getString("lat");
                  String lng = json_data.getString("long");
              }
          }
      }
      

      【讨论】:

        【解决方案7】:

        如果响应是这样的

        "GetDataResult": "[{\"UserID\":1,\"DeviceID\":\"d1254\",\"MobileNO\":\"056688\",\"Pak1\":true,\"pak2\":true,\"pak3\":false,\"pak4\":true,\"pak5\":true,\"pak6\":false,\"pak7\":false,\"pak8\":true,\"pak9\":false,\"pak10\":true,\"pak11\":false,\"pak12\":false}]"
        

        你可以这样解析

        JSONObject jobj=new JSONObject(response);
                String c = jobj.getString("GetDataResult");         
                JSONArray jArray = new JSONArray(c);
                deviceId=jArray.getJSONObject(0).getString("DeviceID");
        

        这里JsonArray的大小是1。否则你应该使用for循环来获取值。

        【讨论】:

          【解决方案8】:

          您可以执行以下操作:

          JSONArray jsonArray = jsnobject.getJSONArray("locations");
              for (int i = 0; i < jsonArray.length(); i++) {
                  JSONObject explrObject = jsonArray.getJSONObject(i);
          }
          

          【讨论】:

            【解决方案9】:

            这是一种非常简单的转换方式:

            import java.io.BufferedReader;
            import java.io.FileReader;
            import java.io.IOException;
            import com.google.gson.Gson;
            import com.google.gson.JsonArray;
            import com.google.gson.JsonElement;
            import com.google.gson.JsonParser;
            
            
            class Usuario {
            private String username;
            private String email;
            private Integer credits;
            private String twitter_username;
            
            public String getUsername() {
                return username;
            }
            
            public void setUsername(String username) {
                this.username = username;
            }
            
            public String getEmail() {
                return email;
            }
            
            public void setEmail(String email) {
                this.email = email;
            }
            
            public Integer getCredits() {
                return credits;
            }
            
            public void setCredits(Integer credits) {
                this.credits = credits;
            }
            
            public String getTwitter_username() {
                return twitter_username;
            }
            
            public void setTwitter_username(String twitter_username) {
                this.twitter_username = twitter_username;
            }
            
            @Override
            public String toString() {
                return "UserName: " + this.getUsername() + " Email: " + this.getEmail();
            }
            

            }

            /*
             * put string into file jsonFileArr.json
             * [{"username":"Hello","email":"hello@email.com","credits"
             * :"100","twitter_username":""},
             * {"username":"Goodbye","email":"goodbye@email.com"
             * ,"credits":"0","twitter_username":""},
             * {"username":"mlsilva","email":"mlsilva@email.com"
             * ,"credits":"524","twitter_username":""},
             * {"username":"fsouza","email":"fsouza@email.com"
             * ,"credits":"1052","twitter_username":""}]
             */
            
            public class TestaGsonLista {
            
            public static void main(String[] args) {
                Gson gson = new Gson();
                try {
                    BufferedReader br = new BufferedReader(new FileReader(
                            "C:\\Temp\\jsonFileArr.json"));
                    JsonArray jsonArray = new JsonParser().parse(br).getAsJsonArray();
                    for (int i = 0; i < jsonArray.size(); i++) {
                        JsonElement str = jsonArray.get(i);
                        Usuario obj = gson.fromJson(str, Usuario.class);
                        System.out.println(obj);
                        System.out.println(str);
                        System.out.println("-------");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            

            }

            【讨论】:

            • 请通过将上下文添加为文本而不是评论来改进您的答案。
            【解决方案10】:

            如果有来自 web 服务的以下 JSON,则 Json 数组作为响应:

                   [3]
             0:  {
             id: 2
             name: "a561137"
             password: "test"
             firstName: "abhishek"
             lastName: "ringsia"
             organization: "bbb"
                }-
            1:  {
             id: 3
             name: "a561023"
             password: "hello"
             firstName: "hello"
              lastName: "hello"
              organization: "hello"
             }-
             2:  {
              id: 4
              name: "a541234"
              password: "hello"
              firstName: "hello"
              lastName: "hello"
              organization: "hello"
                }
            

            必须首先将其作为 Json Array 接受,然后在读取其 Object 时必须使用 Object Mapper.readValue ,因为 Json Object 仍在 String 中。

                  List<User> list = new ArrayList<User>();
                  JSONArray jsonArr = new JSONArray(response);
            
            
                  for (int i = 0; i < jsonArr.length(); i++) {
                    JSONObject jsonObj = jsonArr.getJSONObject(i);
                     ObjectMapper mapper = new ObjectMapper();
                    User usr = mapper.readValue(jsonObj.toString(), User.class);      
                    list.add(usr);
            
                }
            

            mapper.read 是正确的函数,如果你使用 mapper.convert(param,param) 。它会给你错误。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-04-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多