-
Notifications
You must be signed in to change notification settings - Fork 0
/
JoeSONParser.java
87 lines (78 loc) · 2.19 KB
/
JoeSONParser.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class JoeSONParser {
public String parseArrayOfMapsIntoJSON(ArrayList<Map<String, String>> arrayOfMap) {
StringBuilder parsedArray = new StringBuilder();
parsedArray.append("{\n");
for (Map<String, String> map : arrayOfMap) {
parsedArray.append("\t\"" + map.get("id") + "\" :\n\t{\n");
for (Map.Entry<String, String> entry : map.entrySet()) {
parsedArray.append("\t\t\"" + entry.getKey() + "\" : \"" + entry.getValue() + "\",\n");
}
parsedArray.append("\t},\n");
}
parsedArray.append("}\n");
return parsedArray.toString();
}
public ArrayList<Map<String, String>> parseJSONIntoArrayOfMaps(String jsonFormatted) {
ArrayList<Map<String, String>> arrayOfMap = new ArrayList<>();
Scanner in = new Scanner(jsonFormatted);
in.nextLine().trim(); // as first line has only an open curly bracket
// "{"
while (in.hasNextLine()) {
Map<String, String> map = new HashMap<>();
// reading id line
String current = in.nextLine().trim();
if (current.equals("}")) // end of file
break;
// getting just the id
// current.trim();
String id = "";
boolean firstQuote = true;
for (int i = 0; i < current.length(); i++) {
if (current.charAt(i) == '"') {
if (firstQuote) {
firstQuote = false;
continue;
} else
break;
}
id += current.charAt(i);
}
map.put("id", id);
while (true) {
current = in.nextLine().trim();
if (current.equals("},"))
break;
if (current.equals("{"))
continue;
String[] entry = { "", "" };
int index = 0;
boolean oddQuote = true;
for (int i = 0; i < current.length(); i++) {
if (current.charAt(i) == '"') {
if (oddQuote) {
oddQuote = false;
continue;
} else {
if (index == 1)
break;
index++;
oddQuote = true;
continue;
}
}
entry[index] += current.charAt(i);
}
entry[1] = entry[1].substring(3); // deleting unwanted part " :
// "
map.put(entry[0], entry[1]); // adding entry to the map
}
arrayOfMap.add(map);
}
in.close();
return arrayOfMap;
}
}