1

こんにちは、これが私のアプリケーションの画像を解析したい場所からの私のJsonリンクです

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

問題は、解析中にテキスト、つまりタイトルとニッドを解析しますが、画像は解析しないということです。誰かが空白を含むオブジェクトを解析する方法を手伝ってもらえますか..つまり、私の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;
    }

前もって感謝します

4

2 に答える 2

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"
   }
]

スペースを含むimageプロパティがあります...これは実現できないので、これには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);
}

さて...あなたは、受信するJSONの最後のエントリしか取得できないことに気づいていますか?foreachあなたはそうではないので

あなたは単にするべきです:

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

たとえば、DataGridを使用して、エントリ以上のものを表示します。

myDataGrid.Source = ck;
于 2012-12-22T11:31:36.853 に答える
1

属性に画像のmain_imageURLが含まれていません。代わりに、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);
于 2012-12-22T10:44:04.647 に答える