2016-07-22 13 views
0

こんにちは私はmysqlとmysqlにユーザーデータを入力するphpスクリプトを持っています。配列の結果を得て、json_encodeのPHPのfunctinoで最終的にjson形式にします。ファイルの内容は以下のとおりです。jsonの構造を正しく選択する方法

[{"priority":"1","rule_body":"person(?x),pid(?y),haspid(?x,?y)","cons":"patient(?x)","boolean":"1"}, 
{"priority":"1","rule_body":"patient(?x),hasbp(high)","cons":"situation(emergency)","boolean":"1"}, 
{"priority":"1","rule_body":"patient(?x),hasbp(high)","cons":"situation(emergency)","boolean":"1"}, 
{"priority":"1","rule_body":"patient(?x),hasbp(high)","cons":"situation(emergency)","boolean":"1"}, 
{"priority":"1","rule_body":"aaa(bbb)","cons":"z(x)","boolean":"1"}, 
{"priority":"1","rule_body":"aaa(bbb)","cons":"z(x)","boolean":"1"}, 
{"priority":"1","rule_body":"aaa(bbb)","cons":"z(x)","boolean":"1"}] 

は、しかし、今私はコピーJAVAでかつ容易にするために読んでJSONを取得し、文字列にJSONファイルの内容を貼り付ける必要があります。私は内容を読み取ることができていますが、位置は、ここで次の順序

に変更されていますが、ブールは終わりにしておく必要がありますことがわかりますように、出力

LENGTH IS____7 
{"priority":"1","boolean":"1","rule_body":"person(?x),pid(?y),haspid(?x,?y)","cons":"patient(?x)"} 
{"priority":"1","boolean":"1","rule_body":"patient(?x),hasbp(high)","cons":"situation(emergency)"} 
{"priority":"1","boolean":"1","rule_body":"patient(?x),hasbp(high)","cons":"situation(emergency)"} 
{"priority":"1","boolean":"1","rule_body":"patient(?x),hasbp(high)","cons":"situation(emergency)"} 
{"priority":"1","boolean":"1","rule_body":"aaa(bbb)","cons":"z(x)"} 
{"priority":"1","boolean":"1","rule_body":"aaa(bbb)","cons":"z(x)"} 
{"priority":"1","boolean":"1","rule_body":"aaa(bbb)","cons":"z(x)"} 

ですが、それは上のポップアップ表示します2番目の番号。私はチュートリアルから差分コードを守り、以下のようにいくつかのことを行いましたが、結果は同じです:この問題ではヘルプが必要です。

jsonInput=[....as shown above the json contents....] 
JSONArray ja = new JSONArray(jsonInput); 
System.out.println("LENGTH IS____"+ja.length()); 
    for(int x=0;x<ja.length();x++) 
    { 
     JSONObject jb = ja.getJSONObject(x); 
     System.out.println(jb); 
    } 
    System.out.println("KKKKKKKKKKKKKKKKKKKKKKKKKKKKKK"); 
+0

あなたの問題は何ですか?シーケンスは問題ありません – Gaurav

+0

私は配列を最初のデータベースと同じでなければならない配列に追加する必要があります。手動で配置することができます。 –

+0

JSONを独自のオブジェクト(POJO)に変換して – Gaurav

答えて

2

JSONはAs Adrian Smith said :

キーの順序を指定するJSONライブラリは、彼らが合うように要素の順序を変更するのは自由ですしません。これはバグではありません。

おそらく、org.jsonを使用します。 getString("myKey")を使用すると、自分の位置を知らなくてもJSONObjectの値にアクセスできます。次に、あなたのクラスのArrayListのを作成し、GsonでそれにあなたのJSONをデシリアライズ

public class myClass{ 
    private int priority; 
    private String rule_body; 
    private String cons; 
    private String boolean; //STRING ! 1 is not a valid boolean value. 
} 

他のソリューションは、あなたのデータを表すクラスを作成することです。

Gson myGsonTool = new Gson(); 
ArrayList<myClass> myData = gson.fromJson(myJsonString, ArrayList<myClass>.class); 

次に、すべてのデータを含むPOJOがあります。

//If i want the value of rule body: 
myData.get(0).getRule_Body(); 

私はあなたのプログラムの目的を知らないので、これはおそらく最良の解決策ではありません。

編集:Gsonはレコードの順序を維持します。

+0

を使用すると感謝します。しかし、String var = jb.getstring(key)を使用していて、その作業はうまくいきま... –

+0

実際にはHashMapを導入するよりも簡単です。私は自分の答えを更新する。 –

関連する問題