2016-07-22 69 views
0

嗨,我有一个PHP脚本,输入用户数据到MySQL和从MySQL我得到的结果在数组中,并最终到PHP的json_encode 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)"} 

,你可以看到的是,布尔必须进行到底,但它的弹出第二个数字。我从教程中学习了不同的代码,做了一些我自己的代码,但结果是一样的:在这个问题上需要帮助。

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

所以你有什么问题,不管顺序dosn't – Gaurav

+0

我希望他们在序列我已经将它们添加到其结构必须是相同的初始数据库中的阵列,或者我如何可以访问内部的元素,所以我可以手动安排它们。 –

+0

所以你可以将JSON转换为你自己的对象(PO​​JO),并使用它 – Gaurav

回答

2

JSON没有指定键As Adrian Smith said :

JSON库可以自由地重新排列元素的顺序,因为他们认为合适的订单。这不是一个错误。

您可能使用org.json。您可以使用getString("myKey")访问JSONObject中的值,而无需知道其位置。

另一个解决方法是创建一个类,它表示你的数据:

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

然后创建类的ArrayList,并与GSON反序列化JSON你在里面。

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更容易。我更新我的答案。 –