首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析android中PHP Webservice的响应

解析android中PHP Webservice的响应
EN

Stack Overflow用户
提问于 2012-04-23 21:02:44
回答 3查看 1.4K关注 0票数 2

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

我从服务器得到的响应数据是

代码语言:javascript
运行
复制
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上显示数据,但我无法解析此output.Please帮助

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

http://www.codeproject.com/Articles/267023/Send-and-receive-json-between-android-and-php

给我一些推荐信。任何帮助都是非常感谢的。

谢谢..。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-23 21:33:07

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

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

http://jsonviewer.stack.hu/

你可以这样解析这个json:

代码语言:javascript
运行
复制
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();
}

记录您的阵列以查看结果:

代码语言:javascript
运行
复制
for (String item : list) {
  Log.d("list", item);
}

结果:

代码语言:javascript
运行
复制
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必须是这样的。

代码语言:javascript
运行
复制
[
    {
        id: "14",
        brand: "Samsung",
        status: "1"
    },
    {
        id: "15",
        brand: "Nokia",
        status: "1"
    },
    {
        id: "16",
        brand: "Sony Ericson",
        status: "1"
    }
]
票数 1
EN

Stack Overflow用户

发布于 2012-04-23 21:23:30

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

代码语言:javascript
运行
复制
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= "14“arrayValue1=”三星“等等。

票数 4
EN

Stack Overflow用户

发布于 2012-04-23 21:27:10

看起来像一个‘笨蛋-json’数组。这基本上是没有问题的,因为你把它看作是一个字符串列表。通常我会建议使用一些JSON类,但在这种特殊的简单情况下,以下内容就足够了:

代码语言:javascript
运行
复制
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(",");

这应该会导致如下结果

代码语言:javascript
运行
复制
new String[]{"14","Samsung","1",....}

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10281078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档