嗨,这是我的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);