Google图表API JSON无效 [英] Google charts API JSON not valid

查看:95
本文介绍了Google图表API JSON无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码返回json for Google图表

  public static DataTable generateDataTable(){
// Create a数据表,
DataTable data = new DataTable();
ArrayList cd = new ArrayList();
cd.add(新的ColumnDescription(name,ValueType.TEXT,Animal name));
cd.add(新的ColumnDescription(链接,ValueType.TEXT,链接到维基百科));
cd.add(新的ColumnDescription(population,ValueType.NUMBER,Population size));
cd.add(新的ColumnDescription(vegeterian,ValueType.BOOLEAN,Vegetarian?));

data.addColumns(cd);

//填写数据表。
尝试{
data.addRowFromValues(Aye-aye,http://en.wikipedia.org/wiki/Aye-aye,100,true);
data.addRowFromValues(Sloth,http://en.wikipedia.org/wiki/Sloth,300,true);
data.addRowFromValues(Leopard,http://en.wikipedia.org/wiki/Leopard,50,false);
data.addRowFromValues(Tiger,http://en.wikipedia.org/wiki/Tiger,80,false);
} catch(TypeMismatchException e){
System.out.println(Invalid type!);
}


返回数据;
}

public static void main(String [] args){
String json = JsonRenderer.renderDataTable(generateDataTable(),false,false).toString();
System.out.println(json);
}

但是返回的JSON

  {cols:[{id:'name',label:'Animal name',type:'string',pattern:''},{id:'link',label :'link to wikipedia',输入:'string',pattern:''},{id:'population',label:'Population size',type:'number',pattern:''},{id:'vegeterian ',label:'Vegetarian?',type:'boolean',pattern:''}]} 

在粘贴到 http://jsonlint.com/ 时无效

返回的json {id:'name',label:'Animal name',type:'string',** pattern:''* *}

解决方案

感谢您的帮助。



我通过使用可以引用未加引号的键的Jackson来解决它。

  import org.codehaus.jackson.JsonFactory; 
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParser;

JsonNode root = null;
String json = JsonRenderer.renderDataTable(generateDataTable(),true,false).toString();

try {
JsonParser parser = new JsonFactory()。createJsonParser(json)
.enable(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES)
.enable(JsonParser.Feature。 ALLOW_SINGLE_QUOTES);
root = new ObjectMapper()。readTree(parser);
} catch(Exception e){
logger.error(e.getMessage());
}

response.getWriter()。println(root.toString());


The following code returns json for Google chart

public static DataTable generateDataTable(){
        // Create a data table,
        DataTable data = new DataTable();
        ArrayList cd = new ArrayList();
        cd.add(new ColumnDescription("name", ValueType.TEXT, "Animal name"));
        cd.add(new ColumnDescription("link", ValueType.TEXT, "Link to wikipedia"));
        cd.add(new ColumnDescription("population", ValueType.NUMBER, "Population size"));
        cd.add(new ColumnDescription("vegeterian", ValueType.BOOLEAN, "Vegetarian?"));

        data.addColumns(cd);

        // Fill the data table.
        try {
          data.addRowFromValues("Aye-aye", "http://en.wikipedia.org/wiki/Aye-aye", 100, true);
          data.addRowFromValues("Sloth", "http://en.wikipedia.org/wiki/Sloth", 300, true);
          data.addRowFromValues("Leopard", "http://en.wikipedia.org/wiki/Leopard", 50, false);
          data.addRowFromValues("Tiger", "http://en.wikipedia.org/wiki/Tiger", 80, false);
        } catch (TypeMismatchException e) {
          System.out.println("Invalid type!");
        }


        return data;
}

public static void main(String []args){
    String json = JsonRenderer.renderDataTable(generateDataTable(), false, false).toString();
    System.out.println(json);
}

But the returned JSON

{cols:[{id:'name',label:'Animal name',type:'string',pattern:''},{id:'link',label:'Link to wikipedia',type:'string',pattern:''},{id:'population',label:'Population size',type:'number',pattern:''},{id:'vegeterian',label:'Vegetarian?',type:'boolean',pattern:''}]}

is not valid when pasted into http://jsonlint.com/

Also what is the pattern value that shows up in the returned json {id:'name',label:'Animal name',type:'string',**pattern:''**}

解决方案

Thanks for the help guys.

I solved it by using Jackson which can quote the unquoted keys

import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParser;  

JsonNode root = null;
String json = JsonRenderer.renderDataTable(generateDataTable(), true, false).toString();

        try{
            JsonParser parser = new JsonFactory().createJsonParser(json)
                .enable(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES)
                .enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES);
                 root = new ObjectMapper().readTree(parser);
            }catch(Exception e){
                logger.error(e.getMessage());
            }

        response.getWriter().println(root.toString());

这篇关于Google图表API JSON无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆