【问题标题】:Parse Response from PHP Webservice in android在android中解析来自PHP Webservice的响应
【发布时间】:2012-05-04 02:18:26
【问题描述】:

我正在尝试在 android 中使用带有 JSON 的 PHP Web 服务

我从服务器得到响应数据

string(170) "["14","Samsung","1","15","Nokia","1","16","Sony Ericson","1","18","LG","1","19","Iphone","1","21","HTC","1","22","Motorola","1","23","Micromax","1","41","BlackBerry","1"]"

我应该如何解析它以在 ListView 上显示它。我熟悉如何通过创建自定义适配器在 ListView 上显示数据,但我无法解析此输出。请帮助

我按照本教程访问 PHP Web 服务

http://www.codeproject.com/Articles/267023/Send-and-receive-json-between-android-and-php
给我一些参考。 任何帮助表示赞赏。
谢谢...

我想知道在php端生成的JSONArray的正确格式是什么??

【问题讨论】:

    标签: php android json web-services


    【解决方案1】:

    这是有效但奇怪的 json 响应。 当你解析这个 json 时,你会得到 27 个值。 14、三星、1、15、诺基亚…… 但似乎每 3 个项目都是一个对象 “14,三星,1” “15,诺基亚,1”。 而那个json并没有反映这一点。

    使用这样的在线 json 解析器,你可以看到你能得到什么结果:

    http://jsonviewer.stack.hu/

    你可以像这样解析那个json:

    List<String> list = new ArrayList<String>();
    int counter = 0;
    boolean first = true;
    String json = "[\"14\",\"Samsung\",\"1\",\"15\",\"Nokia\",\"1\",\"16\",\"Sony Ericson\",\"1\",\"18\",\"LG\",\"1\",\"19\",\"Iphone\",\"1\",\"21\",\"HTC\",\"1\",\"22\",\"Motorola\",\"1\",\"23\",\"Micromax\",\"1\",\"41\",\"BlackBerry\",\"1\"]";
    JSONArray getJSONArray;
    try {
      getJSONArray = new JSONArray(json);
    
      for (int i = 0; i < getJSONArray.length(); i++) {
    
        Log.d("", getJSONArray.getString(i) + "-" + i % 1 + "-" + i % 2);
    
        if ((first == true && counter == 1) || (first == false && counter == 2)) {
          list.add(getJSONArray.getString(i));
          counter = 0;
          first = false;
        }
        else {
          counter += 1;
        }
      }
    }
    catch (JSONException e) {
      e.printStackTrace();
    }
    

    记录您的阵列以查看您得到了什么:

    for (String item : list) {
      Log.d("list", item);
    }
    

    结果:

    D/list    ( 1669): Samsung
    D/list    ( 1669): Nokia
    D/list    ( 1669): Sony Ericson
    D/list    ( 1669): LG
    D/list    ( 1669): Iphone
    D/list    ( 1669): HTC
    D/list    ( 1669): Motorola
    D/list    ( 1669): Micromax
    D/list    ( 1669): BlackBerry
    

    对于服务器站点:

    通常json必须是这样的..

    [
        {
            id: "14",
            brand: "Samsung",
            status: "1"
        },
        {
            id: "15",
            brand: "Nokia",
            status: "1"
        },
        {
            id: "16",
            brand: "Sony Ericson",
            status: "1"
        }
    ]
    

    【讨论】:

    • 感谢您的回答和解释..这对我有帮助
    【解决方案2】:

    看起来像一个 'stupid-json' 数组。基本上没有问题,因为您将其视为字符串列表。通常我会建议使用一些 JSON 类,但在这种特殊的简单情况下,以下就足够了:

    String jsonString = "["14","Samsung","1","15","Nokia","1","16","Sony Ericson","1","18","LG","1","19","Iphone","1","21","HTC","1","22","Motorola","1","23","Micromax","1","41","BlackBerry","1"]"
    jsonString = jsonString.subString(1, substring.length() -1);
    String[] singleValues = jsonString.split(",");
    

    这应该会导致这个

    new String[]{"14","Samsung","1",....}
    

    您可以在自定义 ListAdapter 中传递该字符串数组(但默认的也应该没问题)

    【讨论】:

    • @Shruti 它是有效的。看看 Nesim Razon 的回答。它“应该”是这样的 "{"data":["14","Samsung","1","15","Nokia","1","16",...]}跨度>
    【解决方案3】:

    首先它不是一个有效的Json格式,Json必须有一个label和对应的value ex。 "label": "value",但是你仍然可以手动解析这个字符串 像这样

    String yourString= "["14","Samsung","1","15","Nokia","1","16","Sony Ericson","1","18","LG","1","19","Iphone","1","21","HTC","1","22","Motorola","1","23","Micromax","1","41","BlackBerry","1"]";
    
    yourString= yourString.subString(1, yourString.length()-1);
    
    String[] arrayValue= yourString.split(",");
    

    现在你有 arrayValue[0]= "14" arrayValue[1]= "Samsung" 等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      相关资源
      最近更新 更多