Javascript 美化textarea输入中的json数据
我已经搜索了这个特定的主题,但找不到任何类似的主题。如果有,请关闭此链接并提供链接 我正在创建一个json数据api模拟器。我希望用户能够将json对象请求复制并粘贴到textarea中,在将其发送到服务器之前,也可以在textarea中对其进行修改 问题是json obj copy和PATSE通常会导致额外的空格,并且永远不会正确对齐,即使使用pre标记也是如此。我还希望一个好的配色方案适用于关键点和值Javascript 美化textarea输入中的json数据,javascript,jquery,html,css,json,Javascript,Jquery,Html,Css,Json,我已经搜索了这个特定的主题,但找不到任何类似的主题。如果有,请关闭此链接并提供链接 我正在创建一个json数据api模拟器。我希望用户能够将json对象请求复制并粘贴到textarea中,在将其发送到服务器之前,也可以在textarea中对其进行修改 问题是json obj copy和PATSE通常会导致额外的空格,并且永远不会正确对齐,即使使用pre标记也是如此。我还希望一个好的配色方案适用于关键点和值 我见过插件、其他问题和代码片段,但它们不适用于文本可编辑的文本区域。在编辑模式下是否有保持
我见过插件、其他问题和代码片段,但它们不适用于文本可编辑的文本区域。在编辑模式下是否有保持样式化的方法,而不显示为其设置样式的所有html标记?我希望能够用javascript或jquery从头开始编写它。我认为用常规文本区域无法做到这一点。您可以做的(以及大多数在线代码编辑器是如何做的)是创建一个透明的文本区域,覆盖在包含样式化代码的div之上。用户仍然能够键入输入并与输入交互(它触发相关联的表单事件),并且可以在div中显示语法高亮显示,用户可以直观地看到 (见附件)
现在关于JSON格式,我将向textarea添加自定义事件,以便当用户键入或粘贴某个内容时,通过Javascript JSON修饰器(请参阅)运行它,然后相应地重新填充div和textarea,语法突出显示很难,但请检查在文本区域中输入的内容。请注意,JSON必须有效才能工作。(使用开发人员控制台捕获错误。)检查有效的json HTML:
<textarea id="myTextArea" cols=50 rows=10></textarea>
<button onclick="prettyPrint()">Pretty Print</button>
首先尝试简单的输入,比如:{“a”:“hello”,“b”:123}
简单漂亮的JSON打印可以相当容易地完成。试试这个js代码:()
对于此HTML:
<textarea id="myTextArea" cols=50 rows=25></textarea>
查看。对于解析步骤,您只需要解析
JSON。解析
文本区域的内容并处理错误输入造成的任何错误
对于问题的格式部分,请使用JSON.stringify(blob,undefined,2)
。或者,如果您需要颜色,这里有一个简单的JSON格式/颜色组件,用React编写:
const HighlightedJSON = ({ json }: Object) => {
const highlightedJSON = jsonObj =>
Object.keys(jsonObj).map(key => {
const value = jsonObj[key];
let valueType = typeof value;
const isSimpleValue =
["string", "number", "boolean"].includes(valueType) || !value;
if (isSimpleValue && valueType === "object") {
valueType = "null";
}
return (
<div key={key} className="line">
<span className="key">{key}:</span>
{isSimpleValue ? (
<span className={valueType}>{`${value}`}</span>
) : (
highlightedJSON(value)
)}
</div>
);
});
return <div className="json">{highlightedJSON(json)}</div>;
};
const HighlightedJSON=({json}:Object)=>{
const highlightedJSON=jsonObj=>
key(jsonObj.map)(key=>{
const value=jsonObj[key];
设valueType=值的类型;
常量值=
[“字符串”、“数字”、“布尔值”]。包括(valueType)| |!值;
如果(isSimpleValue&&valueType==“对象”){
valueType=“null”;
}
返回(
{key}:
{isSimpleValue(
{`${value}`}
) : (
highlightedJSON(值)
)}
);
});
返回{highlightedJSON(json)};
};
查看此代码笔中的工作情况:
希望有帮助 这里有一个递归函数,用于在对象被多次字符串化时返回该对象:
const jsonPrettify = (json) => {
if (typeof json === 'object' && json !== null) {
const pretty = JSON.stringify(json, undefined, 4);
return pretty;
}
try {
const obj = JSON.parse(json);
return jsonPrettify(obj);
} catch (e) {
return json;
}
};
晚回答但现代回答,使用秘密意图参数 我通常选择:
JSON.stringify(myData,null,4)代码>
这是代码定义,它解释得很好
stringify(value:any,replacer?:(this:any,key:string,value:any)=>any,space?:string | number):string代码>
/**
* Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
* @param value A JavaScript value, usually an object or array, to be converted.
* @param replacer An array of strings and numbers that acts as a approved list for selecting the object properties that will be stringified.
* @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
*/
如果你是jquery的粉丝,你也可以使用我写的这个小插件:
//插件
$.fn.json_beautify=function(){
var obj=JSON.parse(this.val());
var pretty=JSON.stringify(obj,未定义,4);
这个.val(漂亮);
};
//然后像这样在任何文本区域使用它
$('#myTextArea').json_bestify()代码>
{“name”:“John”,“age”:30}
JSON.stringify(obj,undefined,4)这就是我要找的。谢谢是的,这是JSON.stringify()的结构。stringify()如何递归?@Luke谢谢!错过了几行!
const jsonPrettify = (json) => {
if (typeof json === 'object' && json !== null) {
const pretty = JSON.stringify(json, undefined, 4);
return pretty;
}
try {
const obj = JSON.parse(json);
return jsonPrettify(obj);
} catch (e) {
return json;
}
};
/**
* Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
* @param value A JavaScript value, usually an object or array, to be converted.
* @param replacer An array of strings and numbers that acts as a approved list for selecting the object properties that will be stringified.
* @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
*/