Pagini recente » Cod sursa (job #2215660) | Cod sursa (job #1933957) | Cod sursa (job #2357097) | Cod sursa (job #2617767) | Cod sursa (job #1359621)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
interface Printable {
void printHead(PrintWriter writer);
void printData(PrintWriter writer);
}
abstract class Field {
private String name;
public Field(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract String getVal();
public abstract void setVal(String string);
}
class Str_Field extends Field {
private String val;
public Str_Field(String name) {
super(name);
}
public Str_Field(String val, String name) {
super(name);
this.val = val;
}
@Override
public String getVal() {
return val;
}
@Override
public void setVal(String string) {
int index = string.indexOf('"') + 1;
val = string.substring(index, string.indexOf('"', index));
}
}
class Num_Field extends Field {
private int val;
public Num_Field(String name) {
super(name);
}
public Num_Field(int val, String name) {
super(name);
this.val = val;
}
@Override
public String getVal() {
return ((Integer) val).toString();
}
@Override
public void setVal(String string) {
val = Integer.parseInt(string.replaceAll("[^0-9]+", ""));
}
}
class Json implements Printable {
private final ArrayList<Field> fields;
public Json() {
fields = new ArrayList<>();
}
void convert(String inputFileName, String outputFileName) {
PrintWriter writer;
int index;
String[] split;
String[] field;
String fieldName;
try {
Scanner reader = new Scanner(new FileInputStream(inputFileName));
reader = reader.useDelimiter("[{}]");
String next = reader.next();
writer = new PrintWriter(outputFileName);
//learning phase
if (reader.hasNext()) {
next = reader.next();
next = next.replace("\r\n", "");
next = next.trim();
if (!next.matches("\\s*,*\\s*")) {
split = next.split(",");
for (String unparsedFields : split) {
field = unparsedFields.split(":");
index = field[0].indexOf('"') + 1;
fieldName = field[0].substring(index,
field[0].indexOf('"', index));
if (field[1].indexOf('"') >= 0) {
index = field[1].indexOf('"') + 1;
fields.add(new Str_Field(field[1].substring(index,
field[1].indexOf('"', index)), fieldName));
} else {
fields.add(new Num_Field(Integer.parseInt(field[1]
.replaceAll("[^0-9]+", "")), fieldName));
}
}
printHead(writer);
printData(writer);
}
}
//processing phase
while (reader.hasNext()) {
next = reader.next();
next = next.replace("\r\n", "");
next = next.trim();
index = 0;
if (!next.matches("\\s*,|]*\\s*")) {
split = next.split(",");
for (String unparsedFields : split) {
fields.get(index).setVal(unparsedFields.split(":")[1]);
index++;
}
printData(writer);
}
}
writer.close();
reader.close();
} catch (FileNotFoundException e) {
System.err.println("File is not there!");
}
}
@Override
public void printHead(PrintWriter writer) {
for (Field field : fields) {
writer.print(field.getName() + ",");
}
}
@Override
public void printData(PrintWriter writer) {
writer.println();
int length = fields.size();
for (int i=0;i<length;i++) {
writer.print(fields.get(i).getVal() + ",");
}
}
}
public class Main {
public static void main(String[] args) {
Json json = new Json();
json.convert("convertor.in", "convertor.out");
}
}