Node.js等同于GSON Json的创建?

时间:2014-05-11 14:34:24

标签: json node.js gson commonjs

我在servlet中有一个Java类,它使用GSON将发布的JSON字符串呈现到Java对象中。该方法的优点在于,GSON过滤掉了与类属性不匹配的所有JSON元素,因此我永远不会得到我不想处理的JSON内容。 servlet的doPost(简化)如下所示:

  protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    PrintWriter out = null;
    try {
        InputStream in = request.getInputStream();
        Demo d = Demo.load(in);
        in.close();
        response.setContentType("text/plain");
        response.setStatus(HttpServletResponse.SC_OK);
        out = response.getWriter();
        out.println(d.toJson);
    } catch (Exception e) {
        e.printStackTrace();
        out.println(e.getMessage());
    }
    out.close();
}

Demo类(我需要在common.js或node.js中重新创建的那个类看起来像这样:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Demo implements Serializable {

    public static Demo load(InputStream in) {
        Demo result = null;
        try {
            Gson gson = new GsonBuilder().create();
            result = gson.fromJson(new InputStreamReader(in), Demo.class);
        } catch (Exception e) {
           result = null;
        }   
        return result;
    }

    @TypeDiscriminator
    @JsonProperty("_id")
    private String              id                  = UUID.randomUUID().toString();
    private Date                created             = new Date();
    private String              color;
    private String              name;
    private String              taste;

    public String getColor() {
        return this.color;
    }

    public String getName() {
        return this.name;
    }

    public String getTaste() {
        return this.taste;
    }

    public Date getCreated() {
        return this.created;
    }

    public String getId() {
        return this.id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setTaste(String taste) {
        this.taste = taste;
    }


    public void setColor(String color) {
        this.color = color;
    }

    public String toJson() {
        GsonBuilder gb = new GsonBuilder();
        gb.setPrettyPrinting();
        gb.disableHtmlEscaping();
        Gson gson = gb.create();
        return gson.toJson(this);
    }
}

显然,我删除了所有的处理逻辑,而servlet只是回复了JSON,这不是应用程序所做的,而是用来说明这一点。我可以在该示例中在HTTP Post中抛出任何String,我只获得有效的Demo对象。

我如何在node.js中做这样的事情?

1 个答案:

答案 0 :(得分:1)

Node.js是Javascript,因此内置了对json的支持。您可以使用JSON.parse将字符串转换为json并将其包装在try catch块中。

要仅包含选择属性,我知道的节点中没有内置功能,除非您使用Mongodb和mongoose,但您可以执行以下操作:拥有"类"这是一个包含你想要的所有属性的对象,并从解析后的json对象中删除那些不在那个" class"宾语。

var class = {x: null, y:null};
for(var prop in object){ 
if (!class.hasOwnProperty (prop)) {
delete object [prop]
}

最好将此类用作对象并公开parseJSON函数以封装此功能