气泡排序存储在JSONArray中的Java字符串
我在磁盘上保存了一个JSON文件,如下所示:气泡排序存储在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,
{
"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();
}
}
}