一段字符串中间提取json字符串
function getJson(jsonStr) {
var stringStack = new stack();
var indexList = [];
var jsonList = [];
    for (var i = 0; i < jsonStr.length; i++) {
        if (jsonStr.charAt(i) == '{' || jsonStr.charAt(i) == '[') {
stringStack.push(new JsonStack(i, jsonStr.charAt(i)));
        } else if (jsonStr.charAt(i) == '}' || jsonStr.charAt(i) == ']') {
            if (stringStack.dataStore.length!=0) {
var js = stringStack.peek();
                if (jsonStr.charAt(i) == '}' && js.char == '{') {
js = stringStack.pop();
                } else if (jsonStr.charAt(i) == ']' && js.char == '[') {
js = stringStack.pop();
}
indexList.push(js.index);
indexList.push(i);
}
}
        if (stringStack.dataStore.length==0 && indexList.length > 0) {
var tempStr = getJsonStr(indexList, jsonStr);
            if (!(tempStr == null || tempStr.length == 0)) {
jsonList.push(tempStr);
}
indexList.splice(0,indexList.length);;
}
}
    if (indexList != null && indexList.length > 0) {
var tempStr = getJsonStr(indexList, jsonStr);
        if (!(tempStr == null || tempStr.length == 0)) {
jsonList.push(tempStr);
}
}
    if (jsonList != null && jsonList.length > 0) {
return jsonList[0];
    } else {
return null;
}
}
function getJsonStr(indexList, str) {
var temp = "";
    for (var i = indexList.length - 1; i >= 0; i = i - 2) {
        try {
temp = str.substring(indexList[i - 1], indexList[i] + 1);
JSON.parse(temp);
return temp;
        } catch (e) {
continue;
}
}
return null;
}
function JsonStack(index, char) {
this.index = index;
this.char = char;
}
function stack() {
this.dataStore = [];//保存栈内元素,初始化为一个空数组
this.top = 0;//栈顶位置,初始化为0
this.push = push;//入栈
this.pop = pop;//出栈
this.peek = peek;//查看栈顶元素
this.clear = clear;//清空栈
this.length = length;//栈内存放元素的个数
}
function push(element) {
this.dataStore[this.top++] = element;
}
function pop() {
return this.dataStore[--this.top];
}
function peek() {
return this.dataStore[this.top - 1];
}
function clear() {
this.top = 0;
}
function length() {
return this.top;
}
package com.ucarinc.bizops.log;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
/**
* Created by zhangbo on 2017/12/29.
*/
public class FindJsonUtil {
    public static List<String> format(String jsonStr) {
Stack<JsonStack> stringStack = new Stack<JsonStack>();
List<Integer> indexList = new LinkedList<Integer>();
List<String> jsonList = new ArrayList<String>();
        for (int i = 0;i<jsonStr.length();i++) {
            if(jsonStr.charAt(i)=='{'||jsonStr.charAt(i)=='['){
stringStack.push(new JsonStack(i,jsonStr.charAt(i)));
            }else if(jsonStr.charAt(i)=='}'||jsonStr.charAt(i)==']'){
                if(!stringStack.empty()){
JsonStack js = stringStack.peek();
                    if(jsonStr.charAt(i)=='}'&&js.getStr() =='{'){
js = stringStack.pop();
                    }else if(jsonStr.charAt(i)==']'&&js.getStr() =='['){
js = stringStack.pop();
}
indexList.add(js.getIndex());
indexList.add(i);
}
                if(stringStack.empty()){
String tempStr= getJsonStr(indexList,jsonStr);
                    if(!(tempStr==null||tempStr.isEmpty())){
jsonList.add(tempStr);
}
indexList.clear();
}
}
}
        if(indexList!=null && indexList.size()>0){
String tempStr= getJsonStr(indexList,jsonStr);
            if(!(tempStr==null||tempStr.isEmpty())) {
jsonList.add(tempStr);
}
}
return jsonList;
}
    private static String getJsonStr(List<Integer> indexList,String str) {
String temp= "";
        for(int i = indexList.size() -1 ; i>=0 ; i=i-2){
            try {
temp = str.substring(indexList.get(i - 1), indexList.get(i)+1);
JSON.parse(temp);
return str.substring(indexList.get(i - 1), indexList.get(i)+1);
            }catch (Exception e){
continue;
}
}
return null;
}
    static class JsonStack{
private Integer index;
private char str;
        public JsonStack(Integer index, char str) {
this.index = index;
this.str = str;
}
        public Integer getIndex() {
return index;
}
        public void setIndex(Integer index) {
this.index = index;
}
        public Character getStr() {
return str;
}
        public void setStr(Character str) {
this.str = str;
}
}
}

一段字符串中间提取json字符串的更多相关文章
- jquery字符串数组转json字符串 C#json字符串转字符串list
		一.jquery字符串数组转json字符串 var str=['1','2','3']; var jsonText= JSON.stringify(str);//把一个对象转换成json字符串 str ... 
- Newtonsoft.Json解析json字符串和写json字符串
		写: StringWriter sw = new StringWriter(); JsonWriter writer = new JsonWriter(sw); //如果报错则使用JsonWriter ... 
- C# 把对象序列化 JSON 字符串 和把JSON字符串还原为对象
		/// <summary> /// 把对象序列化 JSON 字符串 /// </summary> /// <typeparam name="T"> ... 
- 提取json字符串中指定格式中的参数值
		直接上代码: import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; p ... 
- python提取json字符串的值
		json_str={ "actor":"邓超", "age":35, "book":[ "英语", ... 
- [python]python子字符串的提取、字符串连接、字符串重复
		1. python使用索引运算符[]和切片运算符[:],来提取字符串. 第一个字符的索引是0,最有一个字符的索引是-1,切片运算符[x:y]表示提取从索引x到索引y-1的字符,不包含索引y. 示例: ... 
- 解析嵌套json字符串,一个json字符串中嵌套另一个json字符串
		我现在有一个字符串是这样: { "msg": { ", "attrName": "sensorData", "trans ... 
- 判断字符串是否为json字符串
		public static class JsonSplitExtention { public static bool IsJson(this string json) { return JsonSp ... 
- Newtonsoft.Json 操作 JSON 字符串
		Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而使用Json的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSeriali ... 
随机推荐
- 解决IE浏览器部分版本不支持background-size属性问题
			background-size是CSS3新增的属性,现在有很多浏览器都支持CSS3了.但是IE浏览器有些版本还是不支持,比如IE8,IE9也有些CSS3的属性会支持,但是有些也不支持.在这里就了解一下 ... 
- 前端如何展示商品属性:SKU多维属性状态判断算法的应用-Vue 实现
			由于公司开发了一个电商项目,涉及到前台商品属性的展示,所以百度上找了一下!找到了 周琪力写的一个算法例子,因为作者只有jQuery 实现demo, 自己仿照 demo 实现了一个 vue 的! 周琪力 ... 
- hdu 4302 Holedox Eating(优先队列/线段树)
			题意:一只蚂蚁位与原点,在x轴正半轴上会不时地出现一些蛋糕,蚂蚁每次想吃蛋糕时选取最近的去吃,如果前后距离相同,则吃眼前的那一块(即方向为蚂蚁的正前),求最后蚂蚁行进距离. 思路:优先队列q存储蚂蚁前 ... 
- 关于python代码的性能
			在python中性能测试是一个很难应付的任务,因为它在反复地优化,也许版本和版本之间差别很大.python中的一个主要的原则是,首先为了简单和可读性去编写代码,在程序运行后,并证明了确实有必要考虑性能 ... 
- LibSVM学习详细说明
			代码文件主要针对Matlab进行说明,但个人仍觉得讲解的支持向量机内容非常棒,可以做为理解这一统计方法的辅助资料; LibSVM是台湾林智仁(Chih-Jen Lin)教授2001年开发的一套支持向量 ... 
- 【207】WinForm Chart类
			目录: 在工具箱中找到 Chart 控件并使用 设置 Chart 属性 代码中设置属性 属性中设置属性 Chart 类说明 ChartAreas ChartAreaCollection 类 Chart ... 
- LXC安装
			#安装lxcsudo apt-get install lxc#创建一个容器,会出现下图选择的界面 lxc-create -t download -n my-container #开启lxc-start ... 
- hibernate的基础学习--多表关联数据查询
			Hibernate共提供4种多表关联数据查询方式 OID数据查询+OGN数据查询方式 HQL数据查询方式 QBC数据查询方式 本地SQL查询方式(hibernate很少用) 1.OID数据查询+OGN ... 
- FTP两种工作模式:主动模式(Active FTP)和被动模式
			在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令.服务器接收到命令后,会用其本地的FTP数据端口 ... 
- firefly安装步骤
			本来公司一个网游服务器端选定了pomelo框架,后来出了个Firefly,为做一个对比,决定研究一下Firefly.看了一下Firefly,感觉头大,python的,本人python小白,只好慢慢折腾 ... 
