1

Joomla アプリケーションで jQuery ウィジェットを使用しています。ウィジェットのデータはオブジェクトであり、json 形式である必要があります。Joomla フレームワークのデータベース機能を使用せずにデータベースから直接データを取得すると、それを実現できます。

もちろん、Joomla MVC 構造内で実行したいし、Joomla データベース機能を利用したい。それを行うと、ウィジェットに出力がありません。

配列として渡されるとデータが表示されず、オブジェクトとして渡されると表示されます。

私の問題は次のとおりです。データベースから直接データを生成し、Joomla データベース構造を使用すると、画面にエコーされたときにまったく同じ結果が生成されますが、一方はグリッドに表示され、もう一方はそうではありません。それは私が抱えていた以前の問題にも当てはまりましたが、その場合、同じデータに対して json_encode を2回呼び出しましたが、表示されたデータにまったく違いはありませんでしたが、一方は機能し、もう一方は機能しません。

私の質問: 私はまだ JSON データに精通していませんが、データがオブジェクトまたは配列として表されているかどうかを確認する方法はありますか? これは非常にばかげた質問かもしれませんが、データに違いがあるに違いないと私には思えます。単にそれを見るだけでは、それを見ることができませんか、それとも何かが欠けていますか?

更新: 返信ありがとうございます。私は何日もこれに座っていました!! 現在、Joomla データベース関数で動作しています。json エンコーディングとは別に、コードに小さな問題があったようですが、モデルとコントローラーの両方で json_encode を使用したときとまったく同じように見えたため、json エンコーディングが二重になりました、これは機能しませんでしたが、Joomla の外部で生成された場合は機能しました (json_encoding の単一使用)。Joomlaの外部で生成されたものと、二重のjsonエンコーディングの後にそれらを見ると、どちらも同じように見えたため、現在と同じように出力を見て問題を見つけることができませんでした。

[]とに関する情報をありがとう{}、それは洞察に満ちていますが、ここに私のコードの例があります:

   [{"TotalRows":2,"Rows":[{"login_id":"122","cust_id":"0","shop_id":"0","nickname":null,"shopicon":null,"website":null,"shopname":null, "username":"","password":"","dob":"0000-00-00","comments":null},
{"login_id":"25","cust_id":"57","shop_id":"42","nickname":"qwerty","shopicon":"shop.ico","website":"http:\/\/www.shop.co.uk","shopname":"Shop","username":"eqweq","password":"wqewqeq","dob":"1981-12-14","comments":"qwqeqeqw"}]}]

これから、配列かオブジェクトかをどのように判断できますか?

4

4 に答える 4

3

次のコードは、すべてのキーを取得し、関連する値が配列またはjsonオブジェクトまたは文字列値の形式であるかどうかを確認するために使用します。

Iterator<?> rootIter = jsonData.keys();
while (rootIter.hasNext())
{
   String name = (String) rootIter.next();
   Object obj = jsonData.get(name);
   if (obj instanceof JSONObject)
   {
      JSONObject jsonObj = (JSONObject) obj;
   }
   else if(obj instanceof JSONArray)
   {
       JSONArray jsonArray = (JSONArray) obj;
   }
   else
   {
      String values = obj.toString();
   }           
}
于 2012-09-25T11:03:59.817 に答える
1

JSON 文字列がある場合は、最初の非空白記号が{またはであるかどうかを簡単に確認できます[{トップレベルが通常のオブジェクトであることを意味します (配列もオブジェクトであることを思い出してください!), [- 配列. また、それをオブジェクトに解析してinstanceof Array、結果が true かどうかを確認することもできます。

于 2012-06-22T14:40:32.480 に答える
0

それらは非常に異なるはずです:

var arr = [1, 2, 3, 4];
console.log(JSON.stringify(arr)); // prints "[1,2,3,4]"
var obj = { a: 1, b: 2, c: 3, d: 4 };
console.log(JSON.stringify(obj)); // prints "{"a":1,"b":2,"c":3,"d":4}".

何が起こっているかを確認できるように、いくつかの入力と出力 (およびいくつかのコード) を示していただけますか?

于 2012-06-22T14:08:49.063 に答える
0

申し訳ありませんuser1154041、これは正確な答えではありませんが、木を見て木を見るのに役立つかもしれません. 開発者は、JavaScript の一部 (またはサブセット JSON) を展開する準備ができたら、それを「縮小」します。これは、すべての空白を削除することを意味します。JavaScript エンジンにとっては違いはありませんが、私たち人間にとっては読みにくいものです。縮小されたコード片を再フォーマットすることは「プリティファイ」と呼ばれることがあり、このプロセスには特別なツールが必要でした。最近、私が使用するすべてのエディターには、あなたの例のように JavaScript または JSON の文字列を取り、それを以下の例のようにはるかに読みやすい形式にフォーマットする「フォーマット」関数があります (有効な JavaScript にするために var ステートメントを追加する必要がありました私の編集者が何をすべきかを理解できるように):

var test = [{
    "TotalRows": 2,
    "Rows": [{
        "login_id": "122",
        "cust_id": "0",
        "shop_id": "0",
        "nickname": null,
        "shopicon": null,
        "website": null,
        "shopname": null,
        "username": "",
        "password": "",
        "dob": "0000-00-00",
        "comments": null
    }, {
        "login_id": "25",
        "cust_id": "57",
        "shop_id": "42",
        "nickname": "qwerty",
        "shopicon": "shop.ico",
        "website": "http://www.shop.co.uk",
        "shopname": "Shop",
        "username": "eqweq",
        "password": "wqewqeq",
        "dob": "1981-12-14",
        "comments": "qwqeqeqw"
    }]
}]

[] は配列を表し、{} はオブジェクトを表すという事実にまだ慣れる必要があることはわかっていますが、はるかに見やすくなっていることに同意しませんか? したがって、このような文字列に困惑した場合は、JavaScript を編集するために設計されたAptana http://www.aptana.comなどの IDE を開きます。JavaScript ファイルを作成し、文字列を var に割り当てて、フォーマット ボタンをクリックします。そうすれば、コードの構造を理解する可能性が半分になります。

于 2012-06-22T14:49:10.717 に答える