java - 如何正确选择json结构

标签 java mysql arrays json

嗨,我有一个 php 脚本,它将用户数据输入到 mysql 中,从 mysql 中我得到一个数组中的结果,最后通过 PHP 的 json_encode 函数得到 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)"}

正如您所看到的, boolean 值必须位于最后,但它会弹出在第二个数字上。我尝试了与教程不同的代码,并做了一些自己的代码,如下所示,但结果是相同的:在这件事上需要帮助。

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");

最佳答案

JSON 未指定键的顺序 As Adrian Smith said :

JSON libraries are free to rearrange the order of the elements as they see fit. This is not a bug.

您可能使用 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 维护记录的顺序。

关于java - 如何正确选择json结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38522522/

相关文章:

java - 如何停止 Beanshell 断言中程序的进一步执行

java - Vaadin popup should show and hide in the click event makes no appear popup

c# - LINQ 查询 MVC Viewmodel 多个表和列表

php - 如何遍历一组动态表单输入并将它们插入到多个表中?

java - 如何检查日期数组与今天的日期是连续的?

php - 如何按降序创建颜色函数

java - java中int和double相乘时加括号出错,为什么?

java - 如何在JFrame上打印方法中的数据

mysql - 为什么 MariaDBb 允许将文本插入 smallint

Php数组在相交键之后对关联键进行排序