2012-12-22 73 views
1

喜是從哪兒我想在我的應用程序來解析圖像的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; 
    } 

由於提前

+0

你能告訴我們你的'ck'對象嗎? (該類) – balexandre

+0

public class ck { public string node_title; public string main_image; public string nid; } –

+0

這就是沒有好,JSON有'主要image'不'main_image'(不帶下劃線),看看我的新的答案,它解決所有的煩惱...... – balexandre

回答

2

這裏是我的新的答案。

你將不得不使用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" 
    } 
] 

,有一個空間的圖像屬性 ......這不是accomplishable,讓我們用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; 
+0

現在圖像div是可見的,但不是實際圖像.. –

+0

我在哪裏whrite代碼從標籤中提取圖像?? –

+0

在ck類或?? –

1

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); 
+0

它在此處給出錯誤src = \「[^ \」] + \「 –

+0

我使用相同的代碼嗎? –

+0

什麼錯誤?編譯時間錯誤?運行時錯誤?什麼錯誤信息?請更具體一些。「使用相同的代碼」是什麼意思?我不明白。 – Codo