0

オンラインチュートリアルを使用して、Webサービスの作成方法、JSONオブジェクトの生成方法、Win 8アプリへの返送方法、および表示方法を学習しています。Webサービスは機能していますが、APPに値を返すのに苦労しています。アプリの私のコードは次のとおりです。

 WinJS.xhr({                         
         url: 'http://localhost/filmgloss/web-service.php?termID=1&format=JSON'
     })
         .done(
            function complete(result) {

                // terms is the key of the object
                for (var terms in result) {

                    for (var term in terms) {


                        if (result.hasOwnProperty(term)) {
                            //here you have to acess to
                            var termName = result[term].termName;
                            var def = result[term].definition;
                        }
                        //Show Terms                 
                        testDef.innerText = definition;
                    }
                }
            },

そして、彼は私のWebサービスのコードを次のようにしています。

if($format == 'json') {
   header('Content-type: application/json');
   echo json_encode(array('terms'=>$terms));
}else...

JSON出力自体は次のようになります。

    {"terms":[{"term":{ "termName":"Focus","definition":"A Focus..."}}]}

私は使ってfor..inいますが、用語の内部を見ることができますterms' I can't work out how to look in`

4

2 に答える 2

0

開発者の友人の助けを借りて、問題を解決することができました。WinHS.xhr私の問題は、 の結果がまだ JSON 配列ではないことに気付いていなかったことです。私のWebサービスはJSON配列を消費すると出力しますが、オブジェクトWinHS.xhrとして返されるようです。XMLHttpRequest

したがって、解決策は、次を使用して結果を処理することでした。

JSON.parse(result.responseText)

For...In次に、期待どおりにループを使用できます。

  for (terms in responseTerms) {

             //terms will find key "terms"
             var termName = responseTerms.terms[0].term.termName;
             var termdefinition = responseTerms.terms[0].term.definition;

             testTerm.innerText = termName;
             testDef.innerText = termdefinition;

         }

コメントしてくださった皆様、ありがとうございます。今後、Win 8 アプリの開発を始めようとしている方の参考になれば幸いです。

于 2012-11-16T11:26:17.963 に答える
0

私は通常、JSON 構造を表す独自のデータ構造を構築します。
あなたの場合、次のようになります。

public class TermsList
{
    public List<Term> terms { get; set; } 
}

public class Term
{
    public string termName { get; set }
    public definition termName { get; set }
    ...
}

次に、文字列をオブジェクトに逆シリアル化できます。これにはさまざまな方法があります。Json.Net を使用します。
1 つの方法を次に示し
ます。C# で JSON を解析する

public static T Deserialise<T>(string json)
{
    T obj = Activator.CreateInstance<T>();
    using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
        obj = (T)serializer.ReadObject(ms); // <== Your missing line
        return obj;
    } 
}

動的に保ちたい場合は、それも機能するはずです。

http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/08/22/using-c-4.0-and-dynamic-to-parse-json.aspx

于 2012-11-16T08:30:04.053 に答える