气泡排序存储在JSONArray中的Java字符串

气泡排序存储在JSONArray中的Java字符串,java,json,sorting,bubble-sort,Java,Json,Sorting,Bubble Sort,我在磁盘上保存了一个JSON文件,如下所示: { "author": [ "Mario Vargas Llosa", "Maria Duenas", "Liviu Rebreanu", "Liviu Rebreanu" ], "nameBook": [ "Eroul discret", "Iubirile croitoresei", "Ion", "Ion" ], "priceBook": [ 34,

我在磁盘上保存了一个JSON文件,如下所示:

{
  "author": [
    "Mario Vargas Llosa",
    "Maria Duenas",
    "Liviu Rebreanu",
    "Liviu Rebreanu"
  ],
  "nameBook": [
    "Eroul discret",
    "Iubirile croitoresei",
    "Ion",
    "Ion"
  ],
  "priceBook": [
    34,
    28,
    40,
    40
  ],
  "publisherBook": [
    "Humanitas",
    "Polirom",
    "Humanitas",
    "Dacia"
  ],
  "idBook": [
    1,
    2,
    3,
    4
  ]
}
然后我有以下Java代码:

// read the json file
FileReader reader = new FileReader(filePath);

JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);

// get a String from the JSON object

JSONArray idBookJ =  (JSONArray) jsonObject.get("idBook");
JSONArray nameBookJ = (JSONArray) jsonObject.get("nameBook");
JSONArray authorJ = (JSONArray) jsonObject.get("author");
JSONArray publisherBookJ = (JSONArray) jsonObject.get("publisherBook");
JSONArray priceBookJ = (JSONArray) jsonObject.get("priceBook");

现在,我需要使用气泡排序法,在单词的第一个字母之后,按字母顺序对
publisherBook
标记中的内容进行排序。我知道这不是最令人惊奇的编程挑战,但我一直在把JSONArray中的字符串当作。。。字符串。

这应该让您开始

static class Book {
  public Book() {

  }
  int id;
  String name;
  String author;
  String publisher;
  int price;
  public String toString() {
    return "[" + id + " " + name + " " + author + " " + publisher + " " + price + "]";
  }
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getAuthor() {
    return author;
  }
  public void setAuthor(String author) {
    this.author = author;
  }
  public String getPublisher() {
    return publisher;
  }
  public void setPublisher(String publisher) {
    this.publisher = publisher;
  }
  public int getPrice() {
    return price;
  }
  public void setPrice(int price) {
    this.price = price;
  } 
}

public static void main(String[] args) {
  // read the json file
  FileReader reader = new FileReader(filePath);

  JSONParser jsonParser = new JSONParser();
  JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);

  // get a String from the JSON object

  JSONArray idBookJ =  (JSONArray) jsonObject.get("idBook");
  JSONArray nameBookJ = (JSONArray) jsonObject.get("nameBook");
  JSONArray authorJ = (JSONArray) jsonObject.get("author");
  JSONArray publisherBookJ = (JSONArray) jsonObject.get("publisherBook");
  JSONArray priceBookJ = (JSONArray) jsonObject.get("priceBook");
  Book[] books = new Book[idBookJ.size()]; 
  for (int i = 0; i < idBookJ.size(); i++) {
    books[i] = new Book();
    books[i].setId(idBookJ.getInt(i));
    books[i].setName(nameBookJ.getString(i));
    books[i].setAuthor(authorJ.getString(i));
    books[i].setPublisher(publisherBookJ.getString(i));
    books[i].setPrice(priceBookJ.getInt(i));
  }
  Comparator<Book> publisherComparator = new Comparator<Book>() {
    @Override
    public int compare(Book o1, Book o2) {
      return o1.getPublisher().compareTo(o2.getPublisher());
    }
  };
  // Now your Books are in the book[], and you have a Comparator that can compare them by
  // publisher.
}
静态类书{
公共书籍(){
}
int-id;
字符串名;
字符串作者;
字符串发布器;
国际价格;
公共字符串toString(){
返回“[”+id+“”+name+“”+author+“”+publisher+“”+price+“”]”;
}
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getAuthor(){
返回作者;
}
公共void setAuthor(字符串编写器){
this.author=作者;
}
公共字符串getPublisher(){
返回出版商;
}
public void setPublisher(字符串发布器){
this.publisher=publisher;
}
public int getPrice(){
退货价格;
}
公共无效设置价格(整数价格){
这个价格=价格;
} 
}
公共静态void main(字符串[]args){
//读取json文件
FileReader=新的FileReader(filePath);
JSONParser JSONParser=新的JSONParser();
JSONObject JSONObject=(JSONObject)jsonParser.parse(reader);
//从JSON对象获取字符串
JSONArray idBookJ=(JSONArray)jsonObject.get(“idBook”);
JSONArray nameBookJ=(JSONArray)jsonObject.get(“nameBook”);
JSONArray authorJ=(JSONArray)jsonObject.get(“作者”);
JSONArray publisherBookJ=(JSONArray)jsonObject.get(“publisherBook”);
JSONArray priceBookJ=(JSONArray)jsonObject.get(“priceBook”);
Book[]books=新书[idBookJ.size()];
对于(int i=0;i
这对我来说很有效,但我还是会发布代码以防万一。这不是纯粹的泡沫式,但总比什么都没有好

JSON数组:

[
   {
      "firstName":"John",
      "lastName":"Doe"
   },
   {
      "firstName":"Anna",
      "lastName":"Smith"
   },
   {
      "firstName":"Peter",
      "lastName":"Jones"
   }
]
JSON简单库可用:


最后一个想法:我发现此解决方案可能会导致NullPointerException,因此我将在有时间时尝试改进它。

您希望按什么标准排序?这就是确定排序顺序应该比较的内容?标准应该是单词的第一个字母。什么单词?作者、出版商、价格、身份证或(书)名?此外,您可能应该将书籍属性集合转换为Java书籍对象(因为每个属性都位于单独的JSON数组中)。对不起,英语不是我的母语。事实上,这是我的问题:如何将其转换为可用的Java表单?我认为答案应该编辑,因为
length()
方法不存在。相反,您可以使用
size()
。感谢您的简短开场白。@GeorgeNetu编辑。我写给Doug Crockford的,下次请指定您使用的库。
package com.iglooworks.test;
    import org.json.simple.JSONArray;
    import org.json.simple.JSONObject;

    import java.util.Set;
    import java.util.SortedMap;
    import java.util.TreeMap;

    public class JsonSorter {
        public static JSONArray sortJsonByKey(JSONArray json, String key)
        {
            JSONArray sorted = new JSONArray();
            SortedMap map = new TreeMap();

            for (Object o : json) {
                JSONObject tmp = (JSONObject) o;
                map.put(tmp.get(key),tmp);
            }

            Set<String> numbers = map.keySet();

            for (String number : numbers) {
                sorted.add(map.get(number));
            }

            return sorted;
        }

}
package com.iglooworks.test;

import com.iglooworks.tools.JsonSorter;
import org.json.simple.*;

public class Test {
    public static void main(String[] args) {
                String json = "[\n" +
                "   {\n" +
                "      \"firstName\":\"John\",\n" +
                "      \"lastName\":\"Doe\"\n" +
                "   },\n" +
                "   {\n" +
                "      \"firstName\":\"Anna\",\n" +
                "      \"lastName\":\"Smith\"\n" +
                "   },\n" +
                "   {\n" +
                "      \"firstName\":\"Peter\",\n" +
                "      \"lastName\":\"Jones\"\n" +
                "   }\n" +
                "]";

        JSONArray jsonArray;
        try {
            jsonArray = tools.sortJsonByKey((JSONArray) JSONValue.parse(json), "firstName");


            for (Object o : jsonArray) {
                JSONObject tmp = (JSONObject) o;
                System.out.println(tmp.get("firstName") + " - " + tmp.get("lastName"));
            }

        } catch (Exception e) {
            e.printStackTrace(); 
        }


    }
}