Add constructor to JsonArray & JsonMap for bettr developer experience

This commit is contained in:
jeffcheasey88 2025-05-01 17:32:20 +02:00
parent 12f2561921
commit cdafc9cbaf
3 changed files with 28 additions and 13 deletions

View file

@ -3,16 +3,25 @@ package dev.peerat.framework.utils.json;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
public class JsonArray extends Json{ public class JsonArray extends Json{
private List<Object> list; private Collection<Object> list;
public JsonArray(){ public JsonArray(){
this.list = new ArrayList<>(); this.list = new ArrayList<>();
} }
public JsonArray(Collection<Object> collection){
this();
this.list.addAll(collection);
}
public JsonArray(Iterator<Object> iterator){
this();
while(iterator.hasNext()) this.list.add(iterator.next());
}
public <E> Collection<E> toList(){ public <E> Collection<E> toList(){
return (Collection<E>) this.list; return (Collection<E>) this.list;
} }

View file

@ -14,6 +14,11 @@ public class JsonMap extends Json{
this.map = new HashMap<>(); this.map = new HashMap<>();
} }
public JsonMap(Map<String, Object> map){
this();
for(Entry<String, Object> entry : map.entrySet()) this.map.put(entry.getKey(), entry.getValue());
}
public Set<Entry<String, Object>> entries(){ public Set<Entry<String, Object>> entries(){
return this.map.entrySet(); return this.map.entrySet();
} }

View file

@ -1,5 +1,7 @@
package dev.peerat.framework.utils.json; package dev.peerat.framework.utils.json;
import static be.jeffcheasey88.peeratcode.parser.TokenType.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -8,7 +10,6 @@ import java.util.Map.Entry;
import be.jeffcheasey88.peeratcode.parser.Parser; import be.jeffcheasey88.peeratcode.parser.Parser;
import be.jeffcheasey88.peeratcode.parser.Token; import be.jeffcheasey88.peeratcode.parser.Token;
import be.jeffcheasey88.peeratcode.parser.TokenType;
import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree; import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree;
import be.jeffcheasey88.peeratcode.parser.state.StateTree; import be.jeffcheasey88.peeratcode.parser.state.StateTree;
@ -43,16 +44,16 @@ public class JsonParser extends Parser<Json>{
.then(content_array_element); .then(content_array_element);
content.then(new RedirectStateTree<>(base, (global, local) -> global.set(local.get()))).end(); content.then(new RedirectStateTree<>(base, (global, local) -> global.set(local.get()))).end();
content.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.STRING), (bag, token) -> bag.set(token))).end(); content.then((validator) -> validator.validate((token) -> token.getType().equals(STRING), (bag, token) -> bag.set(token))).end();
content.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.CHAR), (bag, token) -> bag.set(token))).end(); content.then((validator) -> validator.validate((token) -> token.getType().equals(CHAR), (bag, token) -> bag.set(token))).end();
StateTree<Json> number = content.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME), (bag, token) -> bag.set(token))); StateTree<Json> number = content.then((validator) -> validator.validate((token) -> token.getType().equals(NAME), (bag, token) -> bag.set(token)));
number.end(); number.end();
number.then((validator) -> validator.validate((token) -> token.getValue().equals("."), (bag, token) -> bag.set(bag.<Token>get().concat(token)))) number.then((validator) -> validator.validate((token) -> token.getValue().equals("."), (bag, token) -> bag.set(bag.<Token>get().concat(token))))
.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME), (bag, token) -> bag.set(bag.<Token>get().concat(token)))) .then((validator) -> validator.validate((token) -> token.getType().equals(NAME), (bag, token) -> bag.set(bag.<Token>get().concat(token))))
.end(); .end();
StateTree<Json> mapper = new StateTree<>(); StateTree<Json> mapper = new StateTree<>();
StateTree<Json> mapper_key = mapper.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.STRING), (bag, token) -> { StateTree<Json> mapper_key = mapper.then((validator) -> validator.validate((token) -> token.getType().equals(STRING), (bag, token) -> {
Map<Token, Object> map = bag.get("map"); Map<Token, Object> map = bag.get("map");
if(map == null){ if(map == null){
map = new HashMap<>(); map = new HashMap<>();
@ -105,20 +106,20 @@ public class JsonParser extends Parser<Json>{
if(value instanceof Token){ if(value instanceof Token){
Token token = (Token) value; Token token = (Token) value;
String content = token.getValue(); String content = token.getValue();
if(token.getType().equals(TokenType.STRING)){ if(token.getType().equals(STRING)){
return content; return content;
}else if(token.getType().equals(TokenType.CHAR)){ }else if(token.getType().equals(CHAR)){
return content.charAt(0); return content.charAt(0);
}else{ }else{
try{ try{
return Long.parseLong(content); return Long.parseLong(content);
}catch(Exception _){ }catch(Exception e){
try { try {
return Double.parseDouble(content); return Double.parseDouble(content);
}catch(Exception __){ }catch(Exception ex){
try{ try{
return Boolean.parseBoolean(content); return Boolean.parseBoolean(content);
}catch(Exception ___){} }catch(Exception exc){}
} }
} }
} }