JSON

protobuf-java中的一些小技巧

字号+ 作者:H5之家 来源:H5之家 2017-12-11 13:05 我要评论( )

1、json字符串和pb对象之间的转换: 1)pom.xml dependencygroupIdcom.google.protobuf/groupIdartifactIdprotobuf-java/artifactIdversion2.5.0/version/depend

1、json字符串和pb对象之间的转换:

1)pom.xml

<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>com.googlecode.protobuf-java-format</groupId> <artifactId>protobuf-java-format</artifactId> <version>1.2</version> </dependency>2)pb消息定义: option java_package = "com.abc.proto"; option java_outer_classname="HelloWordPB"; message HelloWord { optional int64 id = 1; optional string name = 2; repeated string recId = 3; }
3)java代码: public class PBTest { public static void main(String[] args) { JSONObject jo = new JSONObject(); JSONArray ja = new JSONArray(); ja.add("1"); ja.add("2"); jo.put("id", 123456);//这里不能是字符串类型,否则pb会报错 jo.put("name", "test"); jo.put("recId", ja); String jsonStr = jo.toJSONString(); System.out.println(jsonStr); //json > pb Builder newBuilder = HelloWordPB.HelloWord.newBuilder(); try { JsonFormat.merge(jsonStr, newBuilder); System.out.println(newBuilder.build().toString()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } //pb > json String printToString = JsonFormat.printToString(newBuilder.build()); System.out.println(printToString); } } 输出: {"name":"test","id":123456,"recId":["1","2"]} id: 123456 name: "test" recId: "1" recId: "2" {"id": 123456,"name": "test","recId": ["1","2"]}
2、pb在构造Builder的时候可以传入一个pb对象:

1)假设我们从redis中读取了一个pb二进制数据,然后反序列化成pb对象:

com.abc.proto.UserRecHistoryPB.UserRecHistory userRecHistory = null; String KEY = MessageFormat.format(CacheConstants.CACHE_KEY_USER_HISTORY_PERF, deviceId); byte[] bs = couchbaseHistoryDao.get(KEY); if (bs != null) { userRecHistory = UserRecHistoryPB.UserRecHistory.parseFrom(bs); }2)接下来对userRecHistory进行修改,修改完毕后需要再保存到redis中: Builder recHistoryBuilder = UserRecHistoryPB.UserRecHistory.newBuilder(userRecHistory); //修改 UserRecHistory build = recHistoryBuilder.build(); String KEY = MessageFormat.format(CacheConstants.CACHE_KEY_USER_HISTORY_PERF, deviceId); int ttl = (int)(System.currentTimeMillis()/1000)+CacheConstants.CACHE_TIME_QUARTER; couchbaseHistoryDao.set(KEY, ttl, build.toByteArray());

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • javascript遍历json对象数据的方法

    javascript遍历json对象数据的方法

    2017-12-11 13:05

  • 好好学习,改变自己

    好好学习,改变自己

    2017-12-10 15:00

  • taglib 学习

    taglib 学习

    2017-12-10 11:00

  • Swift中的JSON模型解析器

    Swift中的JSON模型解析器

    2017-12-09 16:09

网友点评