25

次のデータをjsonオブジェクトに追加する方法を理解しようとしています。誰かが私にこれを行う方法を教えてもらえますか?

ウェブサイトの例

$(document).ready(function() {
  $('#example').dataTable( {
    "aoColumnDefs": [
     { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] },
     { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] },
     { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] }
   ]
  } );
} );

上記の例を組み込む必要がある私のJSONObject。

    JSONObject json = new JSONObject();
    json.put("aoColumnDefs", );
4

3 に答える 3

35

この結果を得るには:

{"aoColumnDefs":[{"aTargets":[0],"aDataSort":[0,1]},{"aTargets":[1],"aDataSort":[1,0]},{"aTargets":[2],"aDataSort":[2,3,4]}]}

これは、次と同じデータを保持します。

  {
    "aoColumnDefs": [
     { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] },
     { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] },
     { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] }
   ]
  }

このコードを使用できます:

    JSONObject jo = new JSONObject();
    Collection<JSONObject> items = new ArrayList<JSONObject>();

    JSONObject item1 = new JSONObject();
    item1.put("aDataSort", new JSONArray(0, 1));
    item1.put("aTargets", new JSONArray(0));
    items.add(item1);
    JSONObject item2 = new JSONObject();
    item2.put("aDataSort", new JSONArray(1, 0));
    item2.put("aTargets", new JSONArray(1));
    items.add(item2);
    JSONObject item3 = new JSONObject();
    item3.put("aDataSort", new JSONArray(2, 3, 4));
    item3.put("aTargets", new JSONArray(2));
    items.add(item3);

    jo.put("aoColumnDefs", new JSONArray(items));

    System.out.println(jo.toString());
于 2012-06-21T17:26:42.937 に答える
18

答えは、JSONArrayも使用し、ツリー構造を「深く」掘り下げることです。

JSONArray arr = new JSONArray();
arr.put (...); // a new JSONObject()
arr.put (...); // a new JSONObject()

JSONObject json = new JSONObject();
json.put ("aoColumnDefs",arr);
于 2012-06-21T17:23:37.970 に答える
3

Francisco Spaethが受け入れた回答は機能し、簡単に理解できます。ただし、JSONを構築する方法は最悪だと思います。PythonをJavaに変換し、辞書やネストされたリストなどを使用して、途方もなく簡単にJSONを構築できるようになったので、これは本当に私にとって大きな意味がありました。

私が本当に嫌いなのは、これらのネストを構築するために、別々のオブジェクトをインスタンス化する(そして一般的にはそれらに名前を付ける)必要があることです。処理するオブジェクトやデータがたくさんある場合、または使用がより抽象的な場合、それは本当に苦痛です!

temp jsonオブジェクトとリストをクリアして再利用することでその一部を回避しようとしましたが、これらのJavaオブジェクトのすべてのputsとgetsなどは値ではなく参照によって機能するため、うまくいきませんでした。そのため、(スタイルは異なりますが)醜いコードが残った後でも、JSONオブジェクトに大量の厄介なデータが含まれることになります。

だから、これが私がこれをきれいにするために思いついたものです。それはさらなる開発を使用する可能性がありますが、これはより合理的なJSON構築コードを探している人のためのベースとして役立つはずです:

import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
import java.util.List;
import org.json.simple.JSONObject;

//  create and initialize an object 
public static JSONObject buildObject( final SimpleEntry... entries ) { 
    JSONObject object = new JSONObject();
    for( SimpleEntry e : entries ) object.put( e.getKey(), e.getValue() );
    return object;
}

//  nest a list of objects inside another                          
public static void putObjects( final JSONObject parentObject, final String key,
                               final JSONObject... objects ) { 
    List objectList = new ArrayList<JSONObject>();
    for( JSONObject o : objects ) objectList.add( o );
    parentObject.put( key, objectList );
}   

実装例:

JSONObject jsonRequest = new JSONObject();
putObjects( jsonRequest, "parent1Key",
    buildObject( 
        new SimpleEntry( "child1Key1", "someValue" )
      , new SimpleEntry( "child1Key2", "someValue" ) 
    )
  , buildObject( 
        new SimpleEntry( "child2Key1", "someValue" )
      , new SimpleEntry( "child2Key2", "someValue" ) 
    )
);      
于 2016-09-22T16:36:00.847 に答える