c++ JsonCpp Parse对Json字符串解析转换判断的补充 Json格式验证

最近在使用JsonCpp的时候,需要判断当前字符串是否为正确的Json格式,但是Jsoncpp对字符串进行认为是正确的json数据,导致获取的时候出错

添加一个验证的方法,在转换之前,提前验证数据是否正确,正确之后才能进行转换

  1 bool IsJsonIllegal(const char *jsoncontent)
  2 {
  3     std::stack<char> jsonstr;
  4     const char *p = jsoncontent;
  5     char startChar = jsoncontent[0];
  6     char endChar = ‘\0‘;
  7     bool isObject = false;//防止 {}{}的判断
  8     bool isArray = false;//防止[][]的判断
  9
 10     while (*p != ‘\0‘)
 11     {
 12         endChar = *p;
 13         switch (*p)
 14         {
 15         case ‘{‘:
 16             if (!isObject)
 17             {
 18                 isObject = true;
 19             }
 20             else  if (jsonstr.empty())//对象重复入栈
 21             {
 22                 return false;
 23             }
 24             jsonstr.push(‘{‘);
 25             break;
 26         case ‘"‘:
 27             if (jsonstr.empty() || jsonstr.top() != ‘"‘)
 28             {
 29                 jsonstr.push(*p);
 30             }
 31             else
 32             {
 33                 jsonstr.pop();
 34             }
 35             break;
 36         case ‘[‘:
 37             if (!isArray)
 38             {
 39                 isArray = true;
 40             }
 41             else  if (jsonstr.empty())//数组重复入栈
 42             {
 43                 return false;
 44             }
 45             jsonstr.push(‘[‘);
 46             break;
 47         case ‘]‘:
 48             if (jsonstr.empty() || jsonstr.top() != ‘[‘)
 49             {
 50                 return false;
 51             }
 52             else
 53             {
 54                 jsonstr.pop();
 55             }
 56             break;
 57         case ‘}‘:
 58             if (jsonstr.empty() || jsonstr.top() != ‘{‘)
 59             {
 60                 return false;
 61             }
 62             else
 63             {
 64                 jsonstr.pop();
 65             }
 66             break;
 67         case ‘\\‘://被转义的字符,跳过
 68             p++;
 69             break;
 70         default:
 71             ;
 72         }
 73         p++;
 74     }
 75
 76     if (jsonstr.empty())
 77     {
 78         //确保是对象或者是数组,之外的都不算有效
 79         switch (startChar)//确保首尾符号对应
 80         {
 81         case  ‘{‘:
 82         {
 83             if (endChar = ‘}‘)
 84             {
 85                 return true;
 86             }
 87             return false;
 88         }
 89         case ‘[‘:
 90         {
 91             if (endChar = ‘]‘)
 92             {
 93                 return true;
 94             }
 95             return false;
 96         }
 97         default:
 98             return false;
 99         }
100
101         return true;
102     }
103     else
104     {
105         return false;
106     }
107 }

原文地址:https://www.cnblogs.com/mingxh/p/9552583.html

时间: 2024-10-15 21:03:35

c++ JsonCpp Parse对Json字符串解析转换判断的补充 Json格式验证的相关文章

JavaScript对象与JSON字符串互相转换详解

JSON是目前互联网数据传输所采用的的主要格式,很多编程语言都有针对JSON的解析器和序列化器,在web前台领域,js对象与JSON字符串的互相转换需求也较为常见. 此文主要讲解js对象和JSON字符串互相转换的方法和一些细节 首先如果需要在开发中使用JSON传输及相应转换需要在html中引入json.js或者json2.js,下载地址:https://github.com/douglascrockford/JSON-js 1.js对象转JSON字符串(序列化) var jsonText = J

C# 对象与JSON字符串互相转换的几种方式

出自:http://blog.csdn.net/testcs_dn/article/details/78150046?locationNum=6&fps=1 目录(?)[-] 方法一DoNet20 需要借助于NewtonsoftJsondll 方法二DataContractJsonSerializer 方法三JavaScriptSerializer 功能对比 性能对比 JSON转C实体类 相关参考 c json数据解析将字符串json格式数据转换成对象 Jsonnet实现方便的Json转Cdyn

VBScript把json字符串解析成json对象的2个方法

这篇文章主要介绍了VBScript把json字符串解析成json对象的2个方法,本文通过MSScriptControl.ScriptControl和jscript实现,需要的朋友可以参考下 asp/vbscript将json字符解析为json对象的方法,如果asp使用jscript来编写服务器端代码操作json字符串就简单了,vbscript需要MSScriptControl.ScriptControl或者服务器端的jscript来作为中间体才行. vbscript将json字符解析为json对

基于开源库jsoncpp的json字符串解析

json(JavaScript Object Notation)是一种轻量级高效数据交换格式.相比于XML,其更加简洁,解析更加方便.在实习期间,我负责的程序模块,多次使用到json进行数据传输.由于之前只对json稍稍了解,而且不熟悉项目组使用的开源json解析库,故在编码过程中效率很低,而且还出现过bug.虽然,最后项目组的事情比较顺利的完成了,但感觉自己对json的编解码熟悉仍然不够,故翻阅了相关文档,写下这篇技术博客.与君共勉. 1.什么是json JSON(JavaScript Obj

C结构体与Json字符串自动转换

我们知道在Java中利用Gson这个包可以很方便地将Object和Json进行自动转换(串行化/反串行化).其原理是利用了Java的反射机制. 最近我的项目中需要将C结构体与Json自动互转.项目背景其实是一个类似protobuf的json协议生成与解析,协议很多,所以我们肯定是希望从一个C结构体的对象自动转成Json,不然协议一条一条自己写,手筋要累断. 要实现这个需求,首先就要给C结构体加入反射机制.我的处理方法是让用户在定义结构体时,额外再定义一个metainfo,用于保存这个结构体的反射

json字符串解析

<span style="font-size:14px;">package com.gamesvr.framework.util; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.math.BigDecimal; import java.math.BigInteger; imp

iOS JSON字符串转化为字典-字典转Json字符串-

1. JSON字符串转化为字典 + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString { if (jsonString == nil) { return nil; } NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *err; NSDictionary *dic = [NSJSONSerialization

JSON数组对象和JSON字符串的转化,map和JSON对象之间的转化

这种用法包括前端和后端: 前端: 1. 转化为JSON对象方便操作 var jsonObj = JSON.parse(str); 得到的是一个json数组对象,可以通过 for (var p in jsonObj){} 来遍历数组中的每个对象,其中p表示key,jsonObj[p]表示key所对应的值. 2. 转化为字符串 var jsonStr = JSON.stringify(jsonObj) 后端:需要用到阿里的fastjson包(其他的用法可以参考博客:https://blog.csdn

当返回值为json字符串时 如何获得其中的json数组

json数据格式 {"IPPORT":"192.168.0.12","time":"2017-04-05 09:12:06","oper":"01","data":[{"paramUnit":"℃","name":"1","data":"3 1.7"