JsonBuilder.java

/*******************************************************************************
 * Copyright (c) 2004, 2013 Steve Flasby
 * All rights reserved.
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 * <ul>
 *     <li>Redistributions of source code must retain the above copyright notice,
 *         this list of conditions and the following disclaimer.</li>
 *     <li>Redistributions in binary form must reproduce the above copyright notice,
 *         this list of conditions and the following disclaimer in the documentation
 *         and/or other materials provided with the distribution.</li>
 * </ul>
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ******************************************************************************/

package org.flasby.json;

import java.util.LinkedHashMap;
import java.util.Map;

/*
 * @author Steve Flasby
 * Jul 30, 2012
 */

public class JsonBuilder {

	private static final String Q = "\"";
	Map<String, String> mHead = new LinkedHashMap<String, String>();
	String mHeadName;

	public JsonBuilder() {
		this(null);
	}
	
	public JsonBuilder(String head) {
		mHeadName = head;
	}
	
	public void add( String name, String value ){
		mHead.put(name, Q+value+Q);
	}
	public void add( String name, long value ){
		mHead.put(name,""+value);
	}
	
	public String toJSON() {
		StringBuilder s;
		if ( mHeadName==null ) {
			s = new StringBuilder();
			buildBlock(s, mHead);
			return s.toString();
		} else {
			s = new StringBuilder("{")
				.append(Q)
				.append(mHeadName)
				.append(Q)
				.append(" : ");
			buildBlock(s, mHead);
			return s.append("}").toString();
		}
	}

	protected void buildBlock(StringBuilder s, Map<String, String> block) {
		boolean needsComma = false;
		if ( mHead!=null ) s.append("{ ");
		for (Map.Entry<String, String> label : block.entrySet()) {
			if ( needsComma ) { s.append(", "); }
			needsComma = true;
			s.append(Q).append(label.getKey()).append(Q);
			s.append(":");
			s.append(label.getValue());
		}
		if ( mHead!=null ) s.append( " } ");
	}
}