【问题标题】:Generate a JSON object form a the value of another JSON in WP8在 WP8 中从另一个 JSON 的值生成一个 JSON 对象
【发布时间】:2014-09-09 12:54:21
【问题描述】:

我正在开发一个 WP8 应用程序。在此我需要连接到结果将是一些 JSON 的 Web 服务。我试图从 Web 服务提供的结果中提取一些数据。我能够从最初的 JSON 响应中提取。但我需要从一个这样的 key 的值中获取一些数据。所以我试图从中生成另一个 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 latest = JObject.Parse(z);”处遇到异常与消息
解析数字时遇到意外字符:m。路径 '',第 1 行,位置 6。 我做错了吗?

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

【问题讨论】:

  • @Gavin z 将是字符串,其字符串值为 result 没有 %

标签: json windows-phone-8


【解决方案1】:

您实际上不能只删除 % 字符来获得有效值。您需要对字符串进行解码。

如果你使用这个:

HttpUtility.UrlDecode(x);

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

{"campaign_id":"1","tfn":"18773374136","campaign_code":"PJC","ad_id":"1","qr_url":"http://1d1.us/PJC /","campaign_name":"PJ 测试活动","is_active":"1","expire_on":"2021-05-05 00:00:00","start_on":"2021-05-05 00:00:00","别名":"","icon_image_url":"products/pjc/pjc3.jpg","fb_page_url":"https://www.facebook.com/JackLaLannePowerJuicerssfb","video_url": "http://youtube.com/embed/yZPedpRA9r0?showinfo=0&autoplay=1&loop=1&playlist=yZPedpRA9r0","url":"https://www.facebook.com

因此,修改该值以使其成为有效的 JSON 可能对您有用,通过在末尾添加缺少的 "} 应该将您的值转换为有效的 JSON 并允许您对其进行解析。

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

【讨论】:

  • 谢谢加文..这工作
【解决方案2】:

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

【讨论】:

  • 谢谢@earthling,但我只想从字符串中找到一些数据,这些数据是早期杰森中'result'键的值
  • 您显然得到了异常,因为该值无效 Jason。看起来它可能是有效的 Jason 数据,但您需要先对其进行 UrlDecode。请参阅@Gavin 的回答。另外,如果您仍然遇到异常,请在解码后尝试在 jsonlint.com 上对其进行验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 2012-08-29
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
相关资源
最近更新 更多