(keys, language)
| 724 | |
| 725 | // 格式化JSON路径为不同编程语言格式 |
| 726 | let _formatJsonPath = function(keys, language) { |
| 727 | if (!keys.length) { |
| 728 | return _getLanguageRoot(language); |
| 729 | } |
| 730 | |
| 731 | let path = ''; |
| 732 | |
| 733 | switch (language) { |
| 734 | case 'javascript': |
| 735 | path = '$'; |
| 736 | for (let i = 0; i < keys.length; i++) { |
| 737 | let key = keys[i]; |
| 738 | if (key.startsWith('[') && key.endsWith(']')) { |
| 739 | // 数组索引 |
| 740 | path += key; |
| 741 | } else { |
| 742 | // 对象属性 |
| 743 | if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) { |
| 744 | // 有效的标识符,使用点语法 |
| 745 | path += '.' + key; |
| 746 | } else { |
| 747 | // 包含特殊字符,使用方括号语法 |
| 748 | path += '["' + key.replace(/"/g, '\\"') + '"]'; |
| 749 | } |
| 750 | } |
| 751 | } |
| 752 | break; |
| 753 | |
| 754 | case 'php': |
| 755 | path = '$data'; |
| 756 | for (let i = 0; i < keys.length; i++) { |
| 757 | let key = keys[i]; |
| 758 | if (key.startsWith('[') && key.endsWith(']')) { |
| 759 | // 数组索引 |
| 760 | path += key; |
| 761 | } else { |
| 762 | // 对象属性 |
| 763 | path += '["' + key.replace(/"/g, '\\"') + '"]'; |
| 764 | } |
| 765 | } |
| 766 | break; |
| 767 | |
| 768 | case 'python': |
| 769 | path = 'data'; |
| 770 | for (let i = 0; i < keys.length; i++) { |
| 771 | let key = keys[i]; |
| 772 | if (key.startsWith('[') && key.endsWith(']')) { |
| 773 | // 数组索引 |
| 774 | path += key; |
| 775 | } else { |
| 776 | // 对象属性 |
| 777 | if (/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key) && !/^(and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield)$/.test(key)) { |
| 778 | // 有效的标识符且不是关键字,可以使用点语法 |
| 779 | path += '.' + key; |
| 780 | } else { |
| 781 | // 使用方括号语法 |
| 782 | path += '["' + key.replace(/"/g, '\\"') + '"]'; |
| 783 | } |
no test coverage detected