json的数据里包含冒号怎么处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json的数据里包含冒号怎么处理相关的知识,希望对你有一定的参考价值。

参考技术A var test = name : "123:456";
有冒号肯定就是字符串了嘛。本回答被提问者和网友采纳
参考技术B

问题久远,补充给后来人看吧,下面是我数据格式(key值中带有冒号):

totalsForAllResults:ga:sessions: "493"

我的取出方法是

var totals = totalsForAllResults['ga:sessions']
consoloe.log(totals)

得到的值493

参考技术C ModBus 可分为两种传输模式: ASCII 模式和 RTU 模式。使用何种模式由用户自行选
择,包括串口通信参数(波特率、校验方式等)。在配置每个控制器的时候,同一个 Mod B
us 网络上的所有设备都必须选择相同的传输模式和串口参数。

1 ASCII 模式
当控制器设为在 ModBus 网络上以 ASCII 模式通信,在消息中的每个 8Bit 字节都作 为
两个 ASCII 字符发送。这种方式的主要优点是字符发送的时间间隔可达到 1 秒而不产生错
误。
表 1 ASCII 模式的消息帧

如表 1 所示,使用 ASCII 模式,消息以冒号(:)字符( ASCII 码 3AH )作为起始位 ,
以回车换行符( ASCII 码 0DH, 0AH )作为结束符。传输过程中,网络上的设备不断侦测 “ : ”
字符,当有一个冒号接收到时,每个设备就解码下个位的地址域,来判断是否发给自己的。
与地址域一致的设备继续接受其它域,直至接受到回车换行符。除起始位和结束符外,其 他
域可以使用的传输字符是十六进制的 0 … 9 , A … F ,当然也要用 ASCII 码表示字符。当选用 A
SCII 模式时,消息帧使用 LRC (纵向冗长检测)进行错误检测。

2RTU 模式
当控制器设为 RTU 模式时,消息帧中的每个 8Bit 字节包含两个 4Bit 的十六进制字符 。
表 2 RTU 模式的消息帧

该模式下消息发送至少要以 3.5 个字符时间的停顿间隔开始。传输过程中,网络设备 不
断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,相应的设备就对 接
下来的传输字符进行解码,一旦有至少 3. 5 个字符时间的停顿就表示该消息的结束。
在 RTU 模式中整个消息帧必须作为一连续的流转输,如果在帧完成之前有超过 1.5 个
字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址
域。同样地,如果一个新消息在小于 3. 5 个字符时间内接着前个消息开始,接收的设备将
认为它是前一消息的延续。如果在传输过程中有以上两种情况发生的话,必然会导致 CRC
校验产生一个错误消息,反馈给发送方设备。
当控制器设为 RTU (远程终端单元)模式通信时,消息中的每个 8Bit 字节包含两个 4 B
it 的十六进制字符。这种模式与 ASCII 模式相比在同样的波特率下,可比 ASCII 模式传送 更多的数据。

=========================================================
关键的两张图只能传上来一张,我看就用ASCII码模式,简单

解析包含冒号的 JSON 字符串

【中文标题】解析包含冒号的 JSON 字符串【英文标题】:Parse JSON string containing a colon 【发布时间】:2015-09-09 18:03:54 【问题描述】:

我用来解析 JSON 的类不允许您在任何字符串中使用冒号。例如,这会导致解析错误:


    "Test:": "Just a test"

关于如何使此类忽略字符串中的冒号的任何想法?这是我正在使用的课程:

class JSON 
    static var inst;
    var text;
    function JSON() 
    
    static function getInstance() 
        if (inst == null) 
            inst = new cinqetdemi.JSON();
        
        return (inst);
    
    static function stringify(arg) 
        var _local3;
        var _local2;
        var _local6;
        var _local1 = "";
        var _local4;
        switch (typeof (arg)) 
            case "object" :
                if (arg) 
                    if (arg instanceof Array) 
                        _local2 = 0;
                        while (_local2 < arg.length) 
                            _local4 = stringify(arg[_local2]);
                            if (_local1) 
                                _local1 = _local1 + ",";
                            
                            _local1 = _local1 + _local4;
                            _local2++;
                        
                        return (("[" + _local1) + "]");
                     else if (typeof (arg.toString) != "undefined") 
                        for (_local2 in arg) 
                            _local4 = arg[_local2];
                            if ((typeof (_local4) != "undefined") && (typeof (_local4) != "function")) 
                                _local4 = stringify(_local4);
                                if (_local1) 
                                    _local1 = _local1 + ",";
                                
                                _local1 = _local1 + ((stringify(_local2) + ":") + _local4);
                            
                        
                        return (("" + _local1) + "");
                    
                
                return ("null");
            case "number" :
                return ((isFinite(arg) ? (String(arg)) : "null"));
            case "string" :
                _local6 = arg.length;
                _local1 = "\"";
                _local2 = 0;
                while (_local2 < _local6) 
                    _local3 = arg.charAt(_local2);
                    if (_local3 >= " ") 
                        if ((_local3 == "\\") || (_local3 == "\"")) 
                            _local1 = _local1 + "\\";
                        
                        _local1 = _local1 + _local3;
                     else 
                        switch (_local3) 
                            case "\b" :
                                _local1 = _local1 + "\\b";
                                break;
                            case "\f" :
                                _local1 = _local1 + "\\f";
                                break;
                            case newline :
                                _local1 = _local1 + "\\n";
                                break;
                            case "\r" :
                                _local1 = _local1 + "\\r";
                                break;
                            case "\t" :
                                _local1 = _local1 + "\\t";
                                break;
                            default :
                                _local3 = _local3.charCodeAt();
                                _local1 = _local1 + (("\\u00" + Math.floor(_local3 / 16).toString(16)) + (_local3 % 16).toString(16));
                        
                    
                    _local2 = _local2 + 1;
                
                return (_local1 + "\"");
            case "boolean" :
                return (String(arg));
        
        return ("null");
    
    static function parse(text) 
        if (!text.length) 
            throw new Error("JSONError: Text missing");
        
        var _local1 = getInstance();
        _local1.at = 0;
        _local1.ch = " ";
        _local1.text = text;
        return (_local1.value());
    
    function error(m) 
        var _local2 = ((("JSONError: " + m) + " at ") + (at - 1)) + newline;
        _local2 = _local2 + (text.substr(at - 10, 20) + newline);
        _local2 = _local2 + "        ^";
        throw new Error(_local2);
    
    function next() 
        ch = text.charAt(at);
        at = at + 1;
        return (ch);
    
    function white() 
        while (ch) 
            if (ch <= " ") 
                next();
             else if (ch == "/") 
                switch (next()) 
                    case "/" :
                        while ((next() && (ch != newline)) && (ch != "\r")) 
                        
                        break;
                    case "*" :
                        next();
                        while (true) 
                            if (ch) 
                                if (ch == "*") 
                                    if (next() == "/") 
                                        next();
                                        break;
                                    
                                 else 
                                    next();
                                
                             else 
                                error("Unterminated comment");
                            
                        
                        break;
                    default :
                        error("Syntax error");
                
             else 
                break;
            
        
    
    function str() 
        var _local5;
        var _local2 = "";
        var _local4;
        var _local3;
        var _local6 = false;
        if ((ch == "\"") || (ch == "'")) 
            var _local7 = ch;
            while (next()) 
                if (ch == _local7) 
                    next();
                    return (_local2);
                 else if (ch == "\\") 
                    switch (next()) 
                        case "b" :
                            _local2 = _local2 + "\b";
                            break;
                        case "f" :
                            _local2 = _local2 + "\f";
                            break;
                        case "n" :
                            _local2 = _local2 + newline;
                            break;
                        case "r" :
                            _local2 = _local2 + "\r";
                            break;
                        case "t" :
                            _local2 = _local2 + "\t";
                            break;
                        case "u" :
                            _local3 = 0;
                            _local5 = 0;
                            while (_local5 < 4) 
                                _local4 = parseInt(next(), 16);
                                if (!isFinite(_local4)) 
                                    _local6 = true;
                                    break;
                                
                                _local3 = (_local3 * 16) + _local4;
                                _local5 = _local5 + 1;
                            
                            if (_local6) 
                                _local6 = false;
                                break;
                            
                            _local2 = _local2 + String.fromCharCode(_local3);
                            break;
                        default :
                            _local2 = _local2 + ch;
                    
                 else 
                    _local2 = _local2 + ch;
                
            
        
        error("Bad string");
    
    function key() 
        var _local2 = ch;
        var _local6 = false;
        var _local3 = text.indexOf(":", at);
        var _local4 = text.indexOf("\"", at);
        var _local5 = text.indexOf("'", at);
        if (((_local4 <= _local3) && (_local4 > -1)) || ((_local5 <= _local3) && (_local5 > -1))) 
            _local2 = str();
            white();
            if (ch == ":") 
                return (_local2);
             else 
                error("Bad key");
            
        
        while (next()) 
            if (ch == ":") 
                return (_local2);
            
            if (ch <= " ") 
             else 
                _local2 = _local2 + ch;
            
        
        error("Bad key");
    
    function arr() 
        var _local2 = [];
        if (ch == "[") 
            next();
            white();
            if (ch == "]") 
                next();
                return (_local2);
            
            while (ch) 
                if (ch == "]") 
                    next();
                    return (_local2);
                
                _local2.push(value());
                white();
                if (ch == "]") 
                    next();
                    return (_local2);
                 else if (ch != ",") 
                    break;
                
                next();
                white();
            
        
        error("Bad array");
    
    function obj() 
        var _local3;
        var _local2 = ;
        if (ch == "") 
            next();
            white();
            if (ch == "") 
                next();
                return (_local2);
            
            while (ch) 
                if (ch == "") 
                    next();
                    return (_local2);
                
                _local3 = this.key();
                if (ch != ":") 
                    break;
                
                next();
                _local2[_local3] = value();
                white();
                if (ch == "") 
                    next();
                    return (_local2);
                 else if (ch != ",") 
                    break;
                
                next();
                white();
            
        
        error("Bad object");
    
    function num() 
        var _local2 = "";
        var _local3;
        if (ch == "-") 
            _local2 = "-";
            next();
        
        while (((((ch >= "0") && (ch <= "9")) || (ch == "x")) || ((ch >= "a") && (ch <= "f"))) || ((ch >= "A") && (ch <= "F"))) 
            _local2 = _local2 + ch;
            next();
        
        if (ch == ".") 
            _local2 = _local2 + ".";
            next();
            while ((ch >= "0") && (ch <= "9")) 
                _local2 = _local2 + ch;
                next();
            
        
        if ((ch == "e") || (ch == "E")) 
            _local2 = _local2 + ch;
            next();
            if ((ch == "-") || (ch == "+")) 
                _local2 = _local2 + ch;
                next();
            
            while ((ch >= "0") && (ch <= "9")) 
                _local2 = _local2 + ch;
                next();
            
        
        _local3 = Number(_local2);
        if (!isFinite(_local3)) 
            error("Bad number");
        
        return (_local3);
    
    function word() 
        switch (ch) 
            case "t" :
                if (((next() == "r") && (next() == "u")) && (next() == "e")) 
                    next();
                    return (true);
                
                break;
            case "f" :
                if ((((next() == "a") && (next() == "l")) && (next() == "s")) && (next() == "e")) 
                    next();
                    return (false);
                
                break;
            case "n" :
                if (((next() == "u") && (next() == "l")) && (next() == "l")) 
                    next();
                    return (null);
                
                break;
        
        error("Syntax error");
    
    function value() 
        white();
        switch (ch) 
            case "" :
                return (obj());
            case "[" :
                return (arr());
            case "\"" :
            case "'" :
                return (str());
            case "-" :
                return (num());
        
        return ((((ch >= "0") && (ch <= "9")) ? (num()) : (word())));
    
    var at = 0;
    var ch = " ";

【问题讨论】:

您是否尝试用反斜杠转义冒号? 这看起来像是反编译或自动生成的代码。如果它是自动生成的,你有它生成的来源吗?这可能更容易修改。 我会选择不同的解析器。例如,JSON 不允许字符串使用单引号,这个解析器允许。 JSON 不允许非转义的控制字符,这个解析器允许。 看到这不仅拒绝某些字符串中的冒号,还接受由单引号分隔的字符串,这不是一个 JSON 解析器。它不适用于您的情况的原因是 key() 函数编写得非常糟糕。它有很多问题,我不确定是否值得花时间尝试调试它,谁知道代码的其他部分中是否还有其他你尚未发现的错误。 它解析 cmets。那是大错特错了。它不会在基本页面之外解析 Unicode,因此没有适合您的表情符号 :-) 【参考方案1】:

看看my answer of this question 并使用我在那里提到的JSON 类,它与您的测试内容工作正常:

import JSON;

var json = new JSON();
var data:String = '"Test:": "Just a test"';

trace(json.parse(data)['Test:']);   // gives : Just a test

希望能有所帮助。

【讨论】:

我使用的课程应该与您提供的课程相同。我的可能有问题,因为它被反编译了。现在工作得很好。谢谢! 如何在 java-script 中做到这一点 @sasharomanov 在 JS 中几乎是一样的:console.log(JSON.parse('"Test:": "Just a test"').Test); // gives : Just a test ... @akmozo,我的意思是如何在不从外部源导入 JSON 的情况下使用它,如何使用纯 JSON.parse('"Test:":"Just a test"'); 而不会出现任何错误 @sasharomanov 如果您说的是 JavaScript,那么在使用 JSON 时应该不会出现任何错误,因为所有现代浏览器都支持原生 JSON 编码和解码。 ActionScript 3 还具有原生的 JSON 功能(请参阅 here),但如果您谈论的是 ActionScript 2,那么您应该从外部源导入 JSON。

以上是关于json的数据里包含冒号怎么处理的主要内容,如果未能解决你的问题,请参考以下文章

js怎么加载&解析json文件,原生的

eggjs 里链接 mysql 返回数据有 RowDataPacket 应该怎么处理?

解析包含冒号的 JSON 字符串

使用postman返回的json数据有\无法解析怎么办?

SpringMVC——对Ajax的处理(包含 JSON 类型)

java后台怎么解析含有特殊字符的json字符串,如含有逗号,冒号等特殊字符