将字符串从Web服务解析为Json对象

时间:2016-08-10 00:12:36

标签: android json parsing httpresponse

我知道有很多关于此的问题,也有很多答案,但是我还没有找到解决这个问题的方法,并且想知道是否有人有想法。

请注意,我是Android的新手,不幸的是从一个不再和我们在一起的Android开发者那里继承了这个项目。

这是我正在处理的事情。 我有一个Android应用程序,它调用Web服务,并获得响应流。

我试过用 String ScanString = new Scanner(inStream).useDelimiter("\\A").next();

似乎工作并产生如下字符串

{"RegResponseResult":"{\u000d\u000a \"REGISTERED\": true,\u000d\u000a \"COMPANY_URL\": \"http:\/\/111.222.3.444\/ABC\/XYZ.svc\/\"\u000d\u000a}"}

我的问题是...... 当我尝试使用JSONObject JSONObj = new JSONObject(ScanString)将字符串转换为JSONObject时,Resutling Object只有一个nameValuePair。

即:key=RegResponseResultvalue={ "REGISTERED": true, \r\n"COMPANY_URL": "http://111.222.3.444/ABC/XYZ.svc/"\r\n} }“

如何喷射JsonObject,忽略'RegResponseResult',然后使用包含标签,以便最终看起来像这样。

ie:JSONObj =

Key=REGESTERD value=true Key=COMPANY_URL value=http://111.222.3.444/ABC/XYZ.svc

非常感谢。

2 个答案:

答案 0 :(得分:0)

"RegResponseResult"是字符串,因此您可能需要再次重新解析它以获取内部json对象。

String innerJson = JSONObj.getString("RegResponseResult");
JSONObject inner = new JSONObject(innerJson);

答案 1 :(得分:0)

感谢您的想法。

我最终改变了我的webservice,输出了一个流而不是一个字符串 结果是WCF在字符串中添加了一串\,这使它无效为Json String。

但是将其作为流返回,并不会导致添加任何内容。 这是网络服务的Stream构建器代码......如果有其他人需要它。

    //When Reading the DB in the Iaaa.csv

    public Stream RegResponse(String DeviceData)
{
    // *****connect to db and call stored proc goes here****
    //  .................

    //  read parameters back from cmd object.
    DeviceRegisterResponse Response = new DeviceRegisterResponse();

    Response.REGISTERED = Convert.ToBoolean(cmd.Parameters["REGISTERED"].Value);
    Response.COMPANY_URL = Convert.ToString(cmd.Parameters["COMPANY_URL"].Value);
    return GenerateStreamFromString(JsonConvert.SerializeObject(Response, Formatting.None));
}


//When passsing it back from the service in the Iaaa.cs
        [OperationContract]
        [WebInvoke(Method = "GET",
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Wrapped,
            UriTemplate = "REG/{id}")]
        Stream RegResponse(string id);