JSON图像解析



嗨,这是我的json链接,我想在该应用程序中解析图像

http://collectionking.com/rest/view/items_in_collection.json?args=122

问题是,解析它在解析文本时,即标题和NID,但不是图片。任何人都可以帮助如何解析其中包含白色空间的对象。.即在我的json中,有一个名为(主图像)的图像。这是主要问题。这是我解析JSON的代码

using (var wc = new WebClient()) {
    JavaScriptSerializer js = new JavaScriptSerializer();
    var result = js.Deserialize<ck[]>(wc.DownloadString("http://collectionking.com/rest/node/122.json"));
    foreach (var i in result)
    {
        lblTitle.Text = i.node_title;
        lblNid.Text = i.nid;
        imgCk.ImageUrl = i.main_image;
    }

预先感谢

这是我的新答案。

,您将使用JavaScriptSerializer遇到问题,因为您的传入JSON就是这样:

[
   {
      "node_title":"<a href="/item/brickell-point">Brickell Point</a>",
      "main image":"<img typeof="foaf:Image" src="http://collectionking.com/sites/default/files/styles/collection_list/public/BrickellPoint_front.jpg" width="200" height="250" alt="" />",
      "nid":"123"
   },
   {
      "node_title":"<a href="/item/flagler-street-bridge">Flagler Street Bridge</a>",
      "main image":"<img typeof="foaf:Image" src="http://collectionking.com/sites/default/files/styles/collection_list/public/FlaglerStreetBridge_Miami_River.Front_.jpg" width="200" height="250" alt="" />",
      "nid":"124"
   }
]

和图像属性在其中有一个空间 ...这是无法完成的,所以让我们使用json.net。

步骤1 - 右键单击您的项目的References,然后选择Manage Nuget Packages和"在线"选项卡中,安装JSON.NET

之后,使用此代码:

// grab information
using (var wc = new WebClient()) {
    json = wc.DownloadString(url);
}
// deserialize using JSON.NET
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<ck[]>(json);
// output
foreach (var i in result)
{
    lblTitle.Text = i.node_title;
    lblNid.Text = i.nid;
    imgCk.ImageUrl = i.main_image;}
}

记住修改您的ck对象

public class ck
{
    public string node_title { get; set; }
    public string nid { get; set; }
    [Newtonsoft.Json.JsonProperty(PropertyName = "main image")]
    public string main_image { get; set; }
}

我们使用JsonProperty映射我们正在收到的正确属性

要从标签中提取标题和图像,因为我不喜欢正则是:

private static string ExtractImageFromTag(string tag)
{
    int start = tag.IndexOf("src=""),
        end = tag.IndexOf(""", start + 6);
    return tag.Substring(start + 5, end - start - 5);
}
private static string ExtractTitleFromTag(string tag)
{
    int start = tag.IndexOf(">"),
        end = tag.IndexOf("<", start + 1);
    return tag.Substring(start + 1, end - start - 1);
}

因此,您可以将其自我使用为:

// output
foreach (var i in result)
{
    // for this example, let's grab the last 
    lblTitle.Text= ExtractTitleFromTag(i.node_title);
    lblNid.Text= i.nid;
    imgCk.ImageUrl= ExtractImageFromTag(i.main_image);
}

现在... 您确实意识到您的foreach只会获得接收JSON的最后一个条目,对吗?因为你不是

您应该简单地做:

foreach (var i in result)
{
    i.node_title = ExtractTitleFromTag(i.node_title);
    i.main_image = ExtractImageFromTag(i.main_image);
}

并使用datagrid显示不仅仅是条目。

myDataGrid.Source = ck;

main_image属性不包含图像URL。相反,它包含一块html,例如:

<img typeof="foaf:Image" src="http://collectionking.com/sites/default/files/styles/collection_list/public/FlaglerStreetBridge_Miami_River.Front_.jpg" width="200" height="250" alt="" />

您可以使用正则表达式提取URL(这不是傻瓜证明,但在大多数情况下可能起作用):

string imageUrl = null;
string htmlPiece = i.main_image;
Match m = Regex.Match(htmlPiece, "src="[^"]+"");
if (m.Success)
  imageUrl = m.Value.Substring(5, m.Value.Length - 6);

最新更新