腳本解析 Cocos 的UI編輯器 Cocostudio 的csd導出的json文件

  • 一個小腳本,主要是爲了免得趴顯示器上一個一個找子節點,挺費眼的。
  • 主要功能是解析json內容,使用了python的json解析,解析出每一個子節點的名字,把所有父節點的名字和自己的名字拼起來用.分割
  • 生成結果形如 _json_name.parent1_p2_p3_newnode = “parent1.p2.p3.newnode”;
  • 可以使用代碼(需要增加解析函數)直接調用getChild(rootNode,_json_name.parent1_p2_p3_newnode) 來獲得子節點,省的保存多個節點或者一直getChildByName的寫法.
#!/usr/bin/python
#
# Parse the csd file, parse the name of the child node and generate the name of the connection.
# Result: javascript code.
# Author: WangKun
# Email: [email protected]

import sys,json

file_object = open(sys.argv[1])
file_object = file_object.read( )
str = json.loads(file_object)
str = str['Content']['Content']['ObjectData']['Children']

path = ''
print_str = '''
    var _json_names = {} 
'''

def printPath( path ):
    global print_str
    print_str +=  "    _json_names." + path.replace('.','_') + " = " + '"' + path + '";\n'

def getName( parent ):
    for child in parent:
        global path
        old = path
        path = path + child['Name']
        printPath(path)
        if( 'Children' in child ):
            path += "."
            getName( child['Children'] )
        path = old
def main():
    global str,print_str
    getName( str )
    print print_str
if __name__ == '__main__':
    main()

腳本沒有判斷參數正確性,直接用第一個參數作爲json文件名執行。
使用:

./parse.py PlayerInfo.json
    var _json_names = {}
    _json_names.a1_1 = "a1_1";
    _json_names.back = "back";
    _json_names.rbg = "rbg";
    _json_names.rb = "rb";
    _json_names.rb_level = "rb.level";
    _json_names.rb_level_lbl = "rb.level.lbl";
    _json_names.rb_score = "rb.score";
    _json_names.rb_score_lbl = "rb.score.lbl";
    _json_names.rb_Image_14 = "rb.Image_14";
    _json_names.rb_right = "rb.right";

解析函數:

// getChildbyName split with .
var getChild = function( nodeName,parent )
{
    if( !nodeName || !parent ) return false;
    if( nodeName.indexOf(".") == -1 ) return parent.getChildByName(nodeName);
    var node  = undefined;
    var names = nodeName.split(".");
    for ( var idx = 0;idx < names.length;idx ++ )
    {
        parent = parent.getChildByName( names[idx] );
        if( !parent ) break;
        if( idx == names.length - 1) {node = parent;}
    }
    return node;
}

// 調用
getChild( _json_names.rb_Image_14, ccsnode )
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章