生成一个JSON对象,形成WP8中另一个JSON的值

时间:2014-09-08 20:38:54

标签: json windows-phone-8

我正在开发WP8应用程序。在这里我需要连接到Web服务,其结果将是一些JSON。我试图从Web服务提供的结果中提取一些数据。我能够从最初的JSON响应中提取。但是我需要从一个这样的密钥的值中获取一些数据。所以我试图从它生成另一个Json对象。但我被卡住了。请帮忙。请在下面找到我的示例代码(我使用的是Newtonsoft.JSon)。

private void messages_buttons_Click(object sender, RoutedEventArgs e)
        {

            var str = "{'status': '0', 'result': '%7B%22campaign_id%22%3A%221%22%2C%22tfn%22%3A%2218773374136%22%2C%22campaign_code%22%3A%22PJC%22%2C%22ad_id%22%3A%221%22%2C%22qr_url%22%3A%22http%3A%5C%2F%5C%2F1d1.us%5C%2FPJC%5C%2F%22%2C%22campaign_name%22%3A%22PJ+Test+Campaign%22%2C%22is_active%22%3A%221%22%2C%22expire_on%22%3A%222021-05-05+00%3A00%3A00%22%2C%22start_on%22%3A%222021-05-05+00%3A00%3A00%22%2C%22alias%22%3A%22%22%2C%22icon_image_url%22%3A%22products%5C%2Fpjc%5C%2Fpjc3.jpg%22%2C%22fb_page_url%22%3A%22https%3A%5C%2F%5C%2Fwww.facebook.com%5C%2FJackLaLannePowerJuicerssfb%22%2C%22video_url%22%3A%22http%3A%5C%2F%5C%2Fyoutube.com%5C%2Fembed%5C%2FyZPedpRA9r0%3Fshowinfo%3D0%26autoplay%3D1%26loop%3D1%26playlist%3DyZPedpRA9r0%22%2C%22url%22%3A%22https%3A%5C%2F%5C%2Fwww.facebook.com'}";
            JObject ne = JObject.Parse(str);
            var x= (ne.GetValue("result")).ToString();
            var z = x.Replace("%", "");
            JObject newest = JObject.Parse(z);
            var y = newest.GetValue("campaign_id");
            MessageBox.Show(y.ToString());
        }

我在“JObject newest = JObject.Parse(z);”中得到一个例外。与消息
解析数字时遇到意外的字符:m。路径'',第1行,第6位。 我完全错了吗?

总的来说:我可以将一个值从一个Json转换为另一个JSOn本身吗?即如果一个json键的值是一个带有一些键值对的字符串,我可以在该字符串上创建一个json对象吗?

2 个答案:

答案 0 :(得分:1)

您实际上只是删除%字符以获取有效值。你需要解码字符串。

如果您使用此:

HttpUtility.UrlDecode(x);

你会发现你的结果"实际上是无效的JSON:

  

{" CAMPAIGN_ID":" 1"" TFN":" 18773374136"" CAMPAIGN_CODE":& #34; PJC"" ad_id":" 1"" qr_url":" HTTP://1d1.us/PJC/& #34;" CAMPAIGN_NAME":" PJ   测试活动"," is_active":" 1"," expire_on":" 2021-05-05   00:00:00"" START_ON":" 2021年5月5日   00:00:00""别名":""" icon_image_url":"产品/ PJC / pjc3.jpg" " fb_page_url":" HTTPS://www.facebook.com/JackLaLannePowerJuicerssfb"," VIDEO_URL":" HTTP://youtube.com/嵌入/ yZPedpRA9r0 showinfo = 0&安培;自动播放= 1&安培;循环= 1&安培;播放列表= yZPedpRA9r0"" URL":" HTTPS://www.facebook.com

所以通过黑客攻击使其成为有效的JSON可能对您有用,通过在末尾添加缺少的"},可以将您的值转换为有效的JSON并允许您解析它。

JObject newest = JObject.Parse(x + "\"}");
var y = newest.GetValue("campaign_id");

答案 1 :(得分:0)

此时z似乎不是有效的json对象。它只是result的值。尝试类似JObject.Parse("'result':" + z);

的内容