【问题标题】:parsing JSON with GSON, but i can't用 GSON 解析 JSON,但我不能
【发布时间】:2012-11-08 22:34:51
【问题描述】:

我想显示URL的JSON,URL是(http://loyaltier.com/app/mobile/code/places/Maps.php),我用GSON写了这段代码,但是当我运行程序时,程序没有显示gsonFoo方法的日志。问题可能是什么?我阅读此链接以使用 GSON,https://stackoverflow.com/questions/7939632/gson-jackson-in-android

Thing.java

package org.example.loyaltier;

public class Thing {
String branchId=null;
String branchCode=null;
String branchName=null;
String branchTel=null;
String address=null;
String cityName=null;
String countryName=null;
String latitude=null;
String longitude=null;
String workingHours=null;
  }

MyLocation.java

 public class MyLocation extends MapActivity {
      public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.location);
                try {
        Log.i("THISSSSSSSSS", "ISSSSSSSSS");
        Log.i("FFOOOORRRR", "YYOUUUUUUUUU");
        gsonFoo();
    } catch (Exception e1) {
        Log.i("catch", "catch");
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
     }
public void gsonFoo() throws Exception
  {
    Gson gson = new Gson();
    Thing thing = gson.fromJson(new FileReader("http://loyaltier.com/app/mobile/code/places/Maps.php"), Thing.class);
    System.out.println(gson.toJson(thing));
    Log.i("GSOOOON", "FOOOO");
  }
}   

【问题讨论】:

    标签: java android json gson


    【解决方案1】:

    您可以在不使用 Gson 的情况下粘贴您的 json 字符串:

    JSONArray ja = new JSONArray("Your json String");
    for (int i = 0; i < ja.length(); i++) {
      JSONObject oneObject = jArray.getJSONObject(i);
      // Pulling items from the array
       String oneBranchId = oneObject.getString("BranchId");
       String oneBranchCode = oneObject.getString("BranchCode");
       String oneBranchTel = oneObject.getString("BranchTel");
       String oneAddress = oneObject.getString("Address");
        //your code here...
     }
    

    【讨论】:

    • 什么是“你的 json 字符串”?你的意思是我在 JSONArray 中复制 URL 地址而不是你的 json 字符串?
    • not @simonQuicke 您需要使用 Httpget 或 post 从服务器或 url 获取 jsonstring,然后将此字符串传递给 JSONArray 并注意您必须使用 asyncTask 从服务器获取数据。您可以看到这个从 url stackoverflow.com/questions/11579693/… 获取 json 的示例
    【解决方案2】:

    Thing thing = gson.fromJson(new FileReader("http://loyaltier.com/app/mobile/code/places/Maps.php"), Thing.class); 包含错误,它采用 FileReader 类的对象而不是 json 数据。因此,您必须从链接中获取 json 数据并将其传递给 FileReader 对象。 根据link提供的json数据,

    [{"BranchId":"1","BranchCode":"b1","BranchName":"The Dubai Mall","BranchTel":"+ 971 4 339 9716","Address":"The Waterfalls, Lower Ground LG-119 Dubai Mall","CityName":"Dubai","CountryName":"UAE","Latitude":"25.197427","Longitude":"55.279251","WorkingHours":"10:00AM - 10:30PM","BranchImage":"dubai-mall.jpg"},{"BranchId":"2","BranchCode":"b2","BranchName":"The Dubai Festival City","BranchTel":"+ 971 4 232 8856","Address":"Shop 102, Ground Floor, North Oval, Dubai Festival City","CityName":"Dubai","CountryName":"UAE","Latitude":"25.22319","Longitude":"55.350394","WorkingHours":"10:00AM - 10:30PM","BranchImage":"festival-City.jpg"},{"BranchId":"3","BranchCode":"b3","BranchName":"Dubai Media City","BranchTel":"+971 4 449 4010 ","Address":"Tower B, Business Central Towers, Dubai Media City","CityName":"Dubai","CountryName":"UAE","Latitude":"25.094713","Longitude":"55.154604","WorkingHours":"10:00AM - 10:30PM","BranchImage":"media-city.jpg"}]
    

    它似乎是Thing 的对象列表,因此您必须将Thing 修改为List 类型。 List 将包含Things 对象。 修改后的代码如下:

    Thing.java

    package org.example.loyaltier;
    
    import java.io.Serializable;
    
    
    public class Thing implements Serializable{
    private String branchId;
    private String branchCode;
    private String branchName;
    private String branchTel;
    private String address;
    private String cityName;
    private String countryName;
    private String latitude;
    private String longitude;
    private String workingHours;
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public String getBranchCode() {
            return branchCode;
        }
    
        public void setBranchCode(String branchCode) {
            this.branchCode = branchCode;
        }
    
        public String getBranchId() {
            return branchId;
        }
    
        public void setBranchId(String branchId) {
            this.branchId = branchId;
        }
    
        public String getBranchName() {
            return branchName;
        }
    
        public void setBranchName(String branchName) {
            this.branchName = branchName;
        }
    
        public String getBranchTel() {
            return branchTel;
        }
    
        public void setBranchTel(String branchTel) {
            this.branchTel = branchTel;
        }
    
        public String getCityName() {
            return cityName;
        }
    
        public void setCityName(String cityName) {
            this.cityName = cityName;
        }
    
        public String getCountryName() {
            return countryName;
        }
    
        public void setCountryName(String countryName) {
            this.countryName = countryName;
        }
    
        public String getLatitude() {
            return latitude;
        }
    
        public void setLatitude(String latitude) {
            this.latitude = latitude;
        }
    
        public String getLongitude() {
            return longitude;
        }
    
        public void setLongitude(String longitude) {
            this.longitude = longitude;
        }
    
        public String getWorkingHours() {
            return workingHours;
        }
    
        public void setWorkingHours(String workingHours) {
            this.workingHours = workingHours;
        }
    
    }
    

    修改gsonFoo()方法为:

    public void gsonFoo() throws Exception {
            URL url = new URL("http://loyaltier.com/app/mobile/code/places/Maps.php");
            InputStream inputStream = url.openStream();
            byte[] bt = new byte[inputStream.available()];
            inputStream.read(bt);
            System.out.println(new String(bt));
            Gson gson = new Gson();
            String input = new String(bt);
            List listOfThings = gson.fromJson(input, List.class);
            //System.out.println(listOfThings.get(0).toString());
    
            for (int i = 0; i < listOfThings.size(); i++) {
                Thing thing = gson.fromJson(listOfThings.get(i).toString(), Thing.class);
                System.out.println(thing.getAddress());
            }
        }
    

    在方法中,String 变量 input 包含从给定 url 检索到的 json 数据。并将数据传递给方法以创建List。而其每个数组中的List 包含json 数据以创建Thing 对象。

    但是从给定链接检索到的 json 数据有错误。在 json 数据中,您必须删除 json 对象值中的空格。例如,"BranchName":"The Dubai Mall" 在其值中包含空格,将其转换为"BranchName":"TheDubaiMall"。并删除每个 json 值中的空格。它会正常工作。试试下面给出的示例 json 数据:

    [{"branchId":"branchidinthing1","branchCode":"branchcodeinthing1","branchName":"branchnameinthing1","branchTel":"telinthing1","address":"addressinthing1","cityName":"citynameinthing1","countryName":"countrynameinthing1","latitude":"latitudeinthing1","longitude":"longitudeinthing1","workingHours":"workinghoursinthing1"},{"branchId":"branchidinthing2","branchCode":"branchcodeinthing2","branchName":"branchnameinthing2","branchTel":"telinthing2","address":"addressinthing2","cityName":"citynameinthing2","countryName":"countrynameinthing2","latitude":"latitudeinthing2","longitude":"longitudeinthing2","workingHours":"workinghoursinthing2"}]
    

    它可以正常工作,因为它在任何 json 值中都不包含空格。

    【讨论】:

      猜你喜欢
      • 2021-08-23
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多