Skip to content

Commit 6e1aef7

Browse files
committed
Some formatting changes
1 parent e1eb14d commit 6e1aef7

File tree

8 files changed

+129
-26
lines changed

8 files changed

+129
-26
lines changed

src/main/java/core/FileOperations.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.io.File;
44
import java.io.FileOutputStream;
5-
import java.io.FileWriter;
65
import java.io.IOException;
76
import java.io.InputStream;
87
import java.io.OutputStreamWriter;

src/main/java/core/JSONObject.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,8 @@ else if (value instanceof List<?>) {
342342
sb.append("{}");
343343
else
344344
sb.append("[]");
345-
} else if (list.get(0) instanceof JSONObject) {
345+
}
346+
else if (list.get(0) instanceof JSONObject) {
346347
sb.append("{\n");
347348
for (int i = 0; i < list.size(); i++) {
348349
sb.append(indentation).append(INDENT);
@@ -361,7 +362,8 @@ else if (value instanceof List<?>) {
361362
sb.append("\n");
362363
}
363364
sb.append(indentation).append("}");
364-
} else {
365+
}
366+
else {
365367
StringBuilder listStrB = new StringBuilder();
366368
listStrB.append("[");
367369
for (int i = 0; i < list.size(); i++) {
@@ -401,7 +403,8 @@ else if (i < lines.length - 1)
401403
// result = String.join(",\n", lines);
402404

403405
sb.append("[\n").append(result).append("\n").append(indentation).append("]");
404-
} else {
406+
}
407+
else {
405408
result = indentation + INDENT + result;
406409

407410
sb.append(result.trim());
@@ -471,8 +474,8 @@ public int hashCode() {
471474
*
472475
* @see JSONObject#toString()
473476
*/
474-
@Override
475477
public boolean equals(JSONObject other) {
476478
return this.toString().equals(other.toString());
477479
}
480+
478481
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package core;
2+
3+
import java.nio.file.Path;
4+
import java.util.Iterator;
5+
import java.util.List;
6+
7+
public class JSONStringifier {
8+
9+
public static void main(String[] args) {
10+
JSONObject json = JSONProcessor.processJson(Path.of("src\\tests\\java\\data\\test1\\test1.json"));
11+
System.out.println(JSONStringifier.stringifyJson(json));
12+
}
13+
14+
/*
15+
* JSON BNF Grammar
16+
* <json> ::= <value>
17+
* <value> ::= <string> | <number> | <object> | <array> | true | false | null
18+
*
19+
* <object> ::= { } | { <members> }
20+
* <members> ::= <pair> | <pair> , <members>
21+
* <pair> ::= <string> : <value>
22+
* semantics rule: <string> must be unique within its level
23+
*
24+
* <array> ::= [ ] | [ <elements> ]
25+
* <elements> ::= <value> | <value> , <elements>
26+
*
27+
* <string> ::= " <characters> "
28+
* <characters> ::= <character> | <character> <characters>
29+
* <character> ::= # any unicode character except " or \ or control characters # | <escape>
30+
*
31+
* <escape> ::= \ (" | \ | / | b | f | n | r | t | u <hex><hex><hex><hex>)
32+
*
33+
* <number> ::= <int> <frac>? <exp>?
34+
* <int> ::= -? <digits>
35+
* <frac> ::= . <digits>
36+
* <exp> ::= (e | E) (+ | -)? <digits>
37+
* <digits> ::= <digit> | <digit> <digits>
38+
* <digit> ::= # digit from 0 to 9 #
39+
* <hex> ::= <digit> | [a-f] | [A-F]
40+
*/
41+
42+
public static String stringifyJson(JSONObject json) {
43+
return stringifyValue(json.getValue());
44+
}
45+
46+
public static String stringifyValue(Object value) {
47+
if (value instanceof List) {
48+
List<?> list = (List<?>) value;
49+
if (!list.isEmpty()) {
50+
51+
}
52+
return stringifyArray((List<?>) value);
53+
}
54+
if (value instanceof String) return "\"" + stringifyEscape((String) value) + "\"";
55+
if (value instanceof Number || value instanceof Boolean) return value.toString();
56+
if (value == null) return "null";
57+
else throw new IllegalArgumentException("Unsupported JSON value: " + value);
58+
}
59+
public static String stringifyValue(Object value, Class<?> type) {
60+
return null;
61+
}
62+
63+
public static String stringifyObject(JSONObject object) {
64+
if (object == null) return "{}";
65+
66+
StringBuilder sb = new StringBuilder();
67+
sb.append("{");
68+
Iterator<?> it = object.iterator();
69+
while (it.hasNext()) {
70+
sb.append(stringifyValue(object.getKey())).append(" : ");
71+
sb.append(stringifyValue(it.next()));
72+
if (it.hasNext()) sb.append(", ");
73+
}
74+
sb.append("}");
75+
76+
return sb.toString();
77+
}
78+
79+
public static String stringifyArray(List<?> array) {
80+
if (array == null || array.isEmpty()) return "[]";
81+
82+
StringBuilder sb = new StringBuilder();
83+
sb.append("[");
84+
Iterator<?> it = array.iterator();
85+
while (it.hasNext()) {
86+
sb.append(stringifyValue(it.next()));
87+
if (it.hasNext()) sb.append(", ");
88+
}
89+
sb.append("]");
90+
91+
return sb.toString();
92+
}
93+
94+
public static String stringifyEscape(String escape) {
95+
return escape
96+
.replace("\\", "\\\\")
97+
.replace("\"", "\\\"")
98+
.replace("\b", "\\b")
99+
.replace("\f", "\\f")
100+
.replace("\n", "\\n")
101+
.replace("\r", "\\r")
102+
.replace("\t", "\\t");
103+
}
104+
105+
}

src/main/java/core/JSONValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public static boolean validateMembers(String membersLine) {
133133
if (membersLine.isEmpty())
134134
return false;
135135

136-
Set<String> keys = new HashSet();
136+
Set<String> keys = new HashSet<>();
137137
String[] members = StringOperations.splitByStringNotNested(membersLine, ",");
138138

139139
for (String pair : members) {

src/main/java/core/StringOperations.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ else if (line.charAt(i) == ']' && !isInString(line, i - 1))
6363
public static boolean isInObject(String line, int position) {
6464
int depth = 0;
6565
for (int i = 0; i < position; i++) {
66-
char current = line.charAt(i);
6766
if (line.charAt(i) == '{' && !isInString(line, i))
6867
depth++;
6968
else if (line.charAt(i) == '}' && !isInString(line, i))

target/test-classes/data/test1/test1.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"negative_double" : -3.14159,
1515
"exponential_positive" : 1.2E10,
1616
"exponential_negative" : -4.5E-5,
17-
"double_max" : 1.7976931348623157e308,
18-
"double_min" : 2.2250738585072014e-308
17+
"double_max" : 1.7976931348623157E308,
18+
"double_min" : 2.2250738585072014E-308
1919
}
20-
}
20+
}

target/test-classes/data/test4/test4.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@
1010
[]
1111
]
1212
]
13-
}
13+
}

target/test-classes/data/test5/test5.json

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
"multi_line_array" : [
88
1,
99
2, 3,
10-
4
11-
10+
4
1211
],
1312
"single_line_object" : {"key1" : "value1", "key2" : {"key3" : "value2"}, "key3" : [false, "string"]},
1413
"mixed_array" : [
@@ -27,24 +26,22 @@
2726
},
2827
"single_line_nested_empty_objects" : { "empty" : {}},
2928
"multi_line_nested_empty_objects" : {
30-
"object" : {"empty" : {
31-
32-
}}
29+
"object" : {
30+
"empty" : { }
31+
}
3332
},
34-
"single_line_empty_array" : [],
35-
"multi_line_empty_array" : [
36-
37-
38-
33+
"single_line_empty_array" : [ ],
34+
"multi_line_empty_array" : [ ],
35+
"single_line_nested_empty_arrays" : [
36+
[ ]
3937
],
40-
"single_line_nested_empty_arrays" : [[]],
4138
"multi_line_nested_empty_arrays" : [
42-
[[
43-
44-
]]
39+
[
40+
[ ]
41+
]
4542
]
4643
}
4744
}
4845
}
4946
}
50-
}
47+
}

0 commit comments

Comments
 (0)