【问题标题】:Get Value from JSON String generated from C# WebService从 C# WebService 生成的 JSON 字符串中获取值
【发布时间】:2017-12-23 13:40:18
【问题描述】:

这是我的 C# 网络服务,它生成一个 JSON 字符串。下面的代码块是我使用的。

List<Dictionary<String, Object>> lstdict = new List<Dictionary<String, Object>>();

...
...
... 
Logic for connecting db and getting records in msqldat (data reader) 
goes here.
...
...

while (msqldat.Read())
{
     var detls = new Dictionary<string, object>();
     for (int i = 0; i < msqldat.FieldCount; i++)
         {
             detls.Add(msqldat.GetName(i), msqldat.IsDBNull(i) ? null : 
             msqldat.GetValue(i));
             lstdict.Add(detls);
        }
}
JavaScriptSerializer jss = new JavaScriptSerializer();
String mret = jss.Serialize(lstdict);

上面的webservice是在android studio的java代码中调用的,它返回下面的字符串。

{"GetDataResult":"[
{\"uname\":\"hkIUZIikXVTC5aNaSva8IQ==\",
\"passwd\":\"hkIUZIikXVTC5aNaSva8IQ==\",
\"validupto\":\"\\\/Date(1545330600000)\\\/\",
\"dept\":\"juubHSHgLr\/3JWnrZCh5LeeW5Q7lioWOZ1\/Tg+YRy\/o=\",
\"rid\":1},
{\"uname\":\"hkIUZIikXVTC5aNaSva8IQ==\",
\"passwd\":\"hkIUZIikXVTC5aNaSva8IQ==\",
\"validupto\":\"\\\/Date(1545330600000)\\\/\",
\"dept\":\"juubHSHgLr\/3JWnrZCh5LeeW5Q7lioWOZ1\/Tg+YRy\/o=\",
\"rid\":2}]"}

我正在尝试使用此 Java 代码获取 android 应用程序中的值:

JSONObject uiobj = new JSONObject(mret);
JSONArray arrUserinfo = uiobj.getJSONArray("GetDataResult");
arrUserinfo.getJSONObject(0).getString("uname"))

代码在第二行失败。我是 JSON 新手。不确定从 c# 代码生成的 JSON 是否正确或用于解析的 java 代码不正确。请进一步告知。提前谢谢你。

【问题讨论】:

  • 第二行代码失败?发布堆栈跟踪?
  • 您的 json 数据格式不正确。这就是它失败的原因。我认为转义字符正在这样做。转到jsonformatter.org 并将您的 json 数据粘贴到那里以查看天气格式是否正确
  • 您的 JSON 的某些部分似乎已经按照JSON.NET Parser seems to be double serializing my objects 的方式进行了双重序列化——即使您使用的是JavaScriptSerializer 而不是Json.NET。你能展示你如何从你的网络服务返回你的 JSON 吗?
  • @AswinPAshok 感谢您的回复。我参考了 jsonformatter.org,发现 JSON 格式无效。谢谢。
  • @dbc 感谢您的回复。这就是我从 WebService 返回的方式。

标签: java c# android json


【解决方案1】:

上面的json是序列化的,你需要解析json然后从中提取对象。

看到这个json有效..

{
    "GetDataResult": [{
            "uname": "hkIUZIikXVTC5aNaSva8IQ==",
            "passwd": "hkIUZIikXVTC5aNaSva8IQ==",
            "validupto": "/Date(1545330600000)/",
            "dept": "juubHSHgLr/3JWnrZCh5LeeW5Q7lioWOZ1/Tg+YRy/o=",
            "rid": 1
        },
        {
            "uname": "hkIUZIikXVTC5aNaSva8IQ==",
            "passwd": "hkIUZIikXVTC5aNaSva8IQ==",
            "validupto": "/Date(1545330600000)/",
            "dept": "juubHSHgLr/3JWnrZCh5LeeW5Q7lioWOZ1/Tg+YRy/o=",
            "rid": 2
        }
    ]
}

要在 java 中解析 json,请参阅下面的帖子..

https://www.geeksforgeeks.org/parse-json-java/

【讨论】:

  • 非常感谢您的帮助。我的 JSON 字符串出错了。但它是从 c# 类自动生成的。然而 JSONParser 返回一个未知符号。
  • 好的。我让 JSONParser 工作了。我想我需要先将 C# 中的 JSON 输出更正为您在此处显示的输出。我会尽力做到这一点。谢谢。
  • 是的json输出是序列化的。
猜你喜欢
  • 1970-01-01
  • 2016-09-30
  • 2021-07-13
  • 1970-01-01
  • 2020-10-31
  • 2012-03-18
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多