zoukankan      html  css  js  c++  java
  • IT民工——发一个万能的JSON解析器吧!

    前言
    之前一直在用Newtonsoft的json解析,但是实在烂的可以!!!

    首先,对于unicode无法解析,竟然跟我删除了\u,返回一堆码(\u6211-> 6211),我都火了!
    还有,如果对方json一变,我这边写的class没有同步,就会报错!

    最后我只能靠自己,写一个json通用模型去解析了。

    概念介绍
    还是先简单说说Json的一些例子吧。注意,以下概念是我自己定义的,可以参考.net里面的TYPE的模型设计
    如果有争议,欢迎提出来探讨!
    1.最简单:
    {"total":0}
    total就是值,值是数值,等于0
    2. 复杂点
    {"total":0,"data":{"377149574" : 1}}
    total是值,data是对象,这个对象包含了"377149574"这个值,等于1
    3. 最复杂
    {"total":0,"data":{"377149574":[{"cid":"377149574"}]}}
    total是值,data是对象,377149574是数组,这个数组包含了一些列的对象,例如{"cid":"377149574"}这个对象。

    有了以上的概念,就可以设计出通用的json模型了。

    源代码
    Code

    Code
    使用方法
            public CommonJsonModel DeSerialize(string json)
            {
                
    return new
     CommonJsonModel(json);
            }

    超级简单,只要new一个通用对象,把json字符串放进去就行了。

    针对上文的3个例子,我给出3种使用方法:
    {"total":0}
    CommonJsonModel model = DeSerialize(json);

    model.GetValue(
    "total"// return 0

    {"total":0,"data":{"377149574" : 1}}
    CommonJsonModel model = DeSerialize(json);

    model.GetModel(
    "data").GetValue("377149574"//return 1

    {"total":0,"data":{"377149574":[{"cid":"377149574"}]}}
    CommonJsonModel model = DeSerialize(json);
    model.GetModel("data").GetCollection(
    "377149574").GetCollection()[0].GetValue("cid"//return 377149574

    这个有点点复杂,
    1. 首先在data对象里面,377149574代表了一个集合,所以要用model.GetModel("data").GetCollection("377149574")把这个集合取出来。
    2. 其次这个集合里面包含了很多对象,因此用GetColllection()把这些对象取出来
    3. 在这些对象List里面取第一个[0],表示取了":{"cid":"377149574"}这个对象,然后再用GetValue("cid")把对象的值取出来。

    后记
    可能我的思路复杂了点,希望给点建议!谢谢!

    IT民工上

    2009/8/17


  • 相关阅读:
    推荐系统实践
    python实现itemCF and userCF
    Mahout分步式程序开发 基于物品的协同过滤ItemCF
    用Maven构建单机Mahout项目
    Apache Mahout:适合所有人的可扩展机器学习框架
    mahout0.7 示例运行纪实
    win7基于mahout推荐之用户相似度计算
    cygwin
    Mahout初体验
    Android慎用layout嵌套, 尽量控制在5层下面java.lang.StackOverflowError
  • 原文地址:https://www.cnblogs.com/zc22/p/1547795.html
Copyright © 2011-2022 走看看