Java中的JSON到JSON转换

时间:2015-12-14 10:38:38

标签: java json jackson gson jolt

我正在尝试根据运行时给出的规范在Java中实现JSON到JSON的转换。

示例:如果在运行时源:com.gsdetails.gname,target:com.track.trackName(即源字段应映射到生成的JSON中的目标字段)

我的方法是为规范部分创建N-array树并做广度第一个traveal(用它来获取队列以产生json的结构) 我正在使用Jackson api从输入JSON创建树并遍历队列(bfs)和输入树以创建生成的json。

无法获得预期的输出

PS:我想过使用JOLT api,但它不符合我的目的

树(用于规范)


public class TrieBuilder {

public static void main(String[] args) throws Exception {
    createSpec();
}

public static Trie createSpec() throws Exception {
    BufferedReader reader = new BufferedReader(
            new FileReader(""));
    String currentLine = reader.readLine();
    Trie trie = new Trie();
    while (currentLine != null) {
        String[] lines = currentLine.split(",");
        String sourceLine = lines[0];
        String targetLine = lines[1];
        String sourcePath = sourceLine.split("=")[1];
        String targetPath = targetLine.split("=")[1];

        trie.insertWord(sourcePath.trim(), targetPath.trim());

        currentLine = reader.readLine();
    }
    return trie;
}

}

class TrieNode { String source;// consider this as content/reference point of a tree String target; boolean isEnd; int count; List childList; boolean isRoot;

/* Constructor */
public TrieNode(String source, String target) {
    childList = new ArrayList<TrieNode>();
    isEnd = false;
    count = 0;
    this.source = source;
    this.target = target;
}

public TrieNode subNodeWord(String word) {
    if (childList != null) {
        for (TrieNode eachChild : childList)
            if (eachChild.source.equals(word))
                return eachChild;
    }
    return null;
}

}

class Trie { public TrieNode root;

/* Constructor */
public Trie() {
    root = new TrieNode("", "");
}

public void insertWord(String sourceWords, String targetWords) {
    if (searchWord(sourceWords) == true)
        return;
    TrieNode current = root;

    String[] sourceArray = sourceWords.split(":");
    String[] targetArray = targetWords.split(":");

    for (int i = 0; i < sourceArray.length; i++) {
        TrieNode child = current.subNodeWord(sourceArray[i]);
        if (child != null) {
            current = child;
        } else {
            current.childList.add(new TrieNode(sourceArray[i],
                    targetArray[i]));
            current = current.subNodeWord(sourceArray[i]);
        }
        current.count++;
    }
    current.isEnd = true;
}

public boolean searchWord(String words) {
    TrieNode current = root;
    for (String word : words.split(":")) {
        if (current.subNodeWord(word) == null) {
            return false;
        } else {
            current = current.subNodeWord(word);
        }
    }

    if (current.isEnd == true)
        return true;
    return false;
}

public Queue<TrieNode> bfsTraversal(TrieNode node) {
    // TODO need to add logic for bfs/dfs for traversing the trie
    Queue<TrieNode> queue = new LinkedList<>();
    Queue<TrieNode> tempQueue = new LinkedList<>();
    queue.add(root);
    while (!queue.isEmpty()) {
        TrieNode tempNode = queue.poll();
        tempQueue.add(tempNode);
        int counter = tempNode.childList.size(), i = 0;
        if (tempNode == null)
            break;
        if (!tempNode.source.isEmpty())
            System.out.println("Source :" + tempNode.source
                    + "     Target : " + tempNode.target);
        while (i < counter) {
            queue.add(tempNode.childList.get(i++));
        }
    }
    tempQueue.poll();
    return tempQueue;
}

源到目标映射文件:

public static void main(String[] args) throws Exception {
    createSpec();
}

public static Trie createSpec() throws Exception {
    BufferedReader reader = new BufferedReader(
            new FileReader(""));
    String currentLine = reader.readLine();
    Trie trie = new Trie();
    while (currentLine != null) {
        String[] lines = currentLine.split(",");
        String sourceLine = lines[0];
        String targetLine = lines[1];
        String sourcePath = sourceLine.split("=")[1];
        String targetPath = targetLine.split("=")[1];

        trie.insertWord(sourcePath.trim(), targetPath.trim());

        currentLine = reader.readLine();
    }
    return trie;
}

帮助程序类(实际转换):

/* Constructor */
public TrieNode(String source, String target) {
    childList = new ArrayList<TrieNode>();
    isEnd = false;
    count = 0;
    this.source = source;
    this.target = target;
}

public TrieNode subNodeWord(String word) {
    if (childList != null) {
        for (TrieNode eachChild : childList)
            if (eachChild.source.equals(word))
                return eachChild;
    }
    return null;
}

0 个答案:

没有答案