JSON에서 새로운 회선을 처리하려면 어떻게 해야 합니까?
JSON을 생성해서 JavaScript의 오브젝트로 가져오려고 합니다.계속 오류가 나요.제가 가진 건 다음과 같습니다.
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = eval('('+data+')');
에러가 표시됩니다.
unterminated string literal
★★★★★★★★★★★★★★★★ JSON.parse(data)메세지가 」 , 「 」Unexpected token ↵"크롬의 경우, 그리고 "unterminated string literal」를 참조해 주세요.
가가 the the the the the the the the the the the when when when when when 를 꺼내면\n 후에sometext어느 경우든 에러는 해소됩니다. 그런 알 가 없네요\n 만들다eval ★★★★★★★★★★★★★★★★★」JSON.parse
원하는 것은 다음과 같습니다.
var data = '{"count" : 1, "stack" : "sometext\\n\\n"}';
요.\)\JSON의 JSON입니다.
하다를 대체할 수 있는 합니다.\n로로 합니다.\\n의 경우에 data문자열 리터럴이 아닙니다.
function jsonEscape(str) {
return str.replace(/\n/g, "\\\\n").replace(/\r/g, "\\\\r").replace(/\t/g, "\\\\t");
}
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = JSON.parse(jsonEscape(data));
: " " "dataObj 것이다
Object {count: 1, stack: "sometext\n\n"}
TLDR: 저자의 문제에 대한 해결책.
String.raw★★★★★★★★★★★★★★★★★★:
var data = String.raw`{"count" : 1, "stack" : "sometext\n\n"}`;
어떤 이유에서인지 이 안에 있는 모든 답변은 JavaScript에서 JSON 문자열 표현을 해석하는 방법에 초점을 맞추고 있습니다.이 때문에 실제 JSON에서 새로운 행을 나타내는 방법에 대해 혼동을 일으킬 수 있습니다.후자는 언어에 의존하지 않습니다.
질문 제목에 따라 엄밀하게 설명:
JSON에서 새로운 회선을 처리하려면 어떻게 해야 합니까?
한다고 가정해 보겠습니다.node 어떤 ) : (어느 언어라도 상관없습니다.)
let obj = JSON.parse(fs.readFileSync('file.json'));
console.log(obj.mykey)
다음에 나타내는 것은, 다음의 각 컨텐츠에 대한 출력입니다.file.json:
입력 1:
{
"mykey": "my multiline
value"
}
출력 1:
SyntaxError: Unexpected token
입력 2:
{
"mykey": "my multiline\nvalue"
}
출력 2:
my multiline
value
입력 3:
{
"mykey": "my multiline\\nvalue"
}
출력 3:
my multiline\nvalue
결론 1:
파일 내의 새 줄을 나타내려면 이 문자를 사용해야 합니다.를 나타내다\n우리는 사용해야 한다\\n.
(입력 파일이 아닌) JavaScript를 사용하여 위의 각 입력을 어떻게 정의해야 합니까?
해야 할 JavaScript JSON이라는 때문에 이 약간 .\n에는 JavaScript 용도 있습니다.그러나 문자 그대로의 수정도 주목해 주십시오.
입력 1:
let input1 = '{"mykey": "my multiline\nvalue"}'
//OR
let input1 = `{
"mykey": "my multiline
value"
}`;
//(or even)
let input1 = `{
"mykey": "my multiline\nvalue"
}`;
//OR
let input1 = String.raw`{
"mykey": "my multiline
value"
}`;
console.log(JSON.parse(input1).mykey);
//SyntaxError: Unexpected token
//in JSON at position [..]
입력 2:
let input2 = '{"mykey": "my multiline\\nvalue"}'
//OR
let input2 = `{
"mykey": "my multiline\\nvalue"
}`;
//OR (Notice the difference from default literal)
let input2 = String.raw`{
"mykey": "my multiline\nvalue"
}`;
console.log(JSON.parse(input2).mykey);
//my multiline
//value
입력 3:
let input3 = '{"mykey": "my multiline\\\\nvalue"}'
//OR
let input3 = `{
"mykey": "my multiline\\\\nvalue"
}`;
//OR (Notice the difference from default literal)
let input3 = String.raw`{
"mykey": "my multiline\\nvalue"
}`;
console.log(JSON.parse(input3).mykey);
//my multiline\nvalue
결론 2:
「」를 jsonjavascript 문자열은 이스케이프가 필요 없기 때문에 사용하는 것이 가장 쉬운 방법입니다(이렇게 이스케이프되는 backtick과는 별개입니다).String.raw`abc${"`"}def` 를 참조해 주세요.
가장 수 있는 .json합니다(javascript를 사용합니다).JSON.stringify를 참조해 주세요.
사양에 따르면 http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf:
의 유니코드 입니다.
U+0022가 있는 한 모든 수 따옴표)는 사용할 수 있습니다.★★★★★★★★★★★★★★( )U+0022솔리더스 )U+005C) 및 문자U+0000로로 합니다.U+001F됩니다. 일부 문자의 이스케이프 시퀀스는 2글자로 표현됩니다.
합격할 수 요.0x0A ★★★★★★★★★★★★★★★★★」0x0C코드를 직접 입력합니다. 에서는 이스케이프 시퀀스 하고 있습니다.에스케이프 시퀀스에서는 코드를 Escape 는 Escape sequence 。U+0000로로 합니다.U+001F:
\f피드 문자형식 피드 문자)를.U+000C를 참조해 주세요.\n문자줄바꿈 문자)를 .U+000A를 참조해 주세요.
대부분의 프로그래밍 언어가 사용하는 것처럼\견적의 경우 이스케이프 구문을 회피해야 합니다(이중 이스케이프 - 언어/플랫폼용 1회, JSON용 1회).
jsonStr = "{ \"name\": \"Multi\\nline.\" }";
글쎄요, 1개의 CSS 클래스로 간단하게 할 수 있는 경우에는 이 기능을 만들 필요가 없습니다.
이 클래스에서 텍스트를 감싸고 매직 보기만 하면 됩니다.d
<p style={{whiteSpace: 'pre-line'}}>my json text goes here \n\n</p>
주의: 텍스트는 항상 HTML을 사용하여 프런트 엔드에 표시되므로 p 태그뿐만 아니라 style="whiteSpace: 'pre-line'}"을(를) 임의의 태그에 추가할 수 있습니다.
예를 들어 JSON 필드의 값을 쓸 때 서버에서 문자열을 이스케이프하거나 클라이언트브라우저에서 값을 취득할 때 이스케이프를 해제할 수 있습니다.
모든 주요 브라우저의 JavaScript 구현에는 unescape 명령어가 있습니다.
예:
서버:
response.write "{""field1"":""" & escape(RS_Temp("textField")) & """}"
브라우저에서:
document.getElementById("text1").value = unescape(jsonObject.field1)
문자열을 이스케이프하기 위해 다음 C# 함수를 조사할 수 있습니다.
http://www.aspcode.net/C-encode-a-string-for-JSON-JavaScript.aspx
public static string Enquote(string s)
{
if (s == null || s.Length == 0)
{
return "\"\"";
}
char c;
int i;
int len = s.Length;
StringBuilder sb = new StringBuilder(len + 4);
string t;
sb.Append('"');
for (i = 0; i < len; i += 1)
{
c = s[i];
if ((c == '\\') || (c == '"') || (c == '>'))
{
sb.Append('\\');
sb.Append(c);
}
else if (c == '\b')
sb.Append("\\b");
else if (c == '\t')
sb.Append("\\t");
else if (c == '\n')
sb.Append("\\n");
else if (c == '\f')
sb.Append("\\f");
else if (c == '\r')
sb.Append("\\r");
else
{
if (c < ' ')
{
//t = "000" + Integer.toHexString(c);
string t = new string(c,1);
t = "000" + int.Parse(tmp,System.Globalization.NumberStyles.HexNumber);
sb.Append("\\u" + t.Substring(t.Length - 4));
}
else
{
sb.Append(c);
}
}
}
sb.Append('"');
return sb.ToString();
}
JSON 데이터를 구문 분석하기 위해 데이터의 줄 바꿈 또는 다른 문자를 제거하기 위해 이 기능을 사용했습니다.
function normalize_str($str) {
$invalid = array(
'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z',
'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A',
'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E',
'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y',
'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a',
'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i',
'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o',
'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r',
"`" => "'", "´" => "'", '"' => ',', '`' => "'",
'´' => "'", '"' => '\"', '"' => "\"", '´' => "'",
"’" => "'",
"{" => "",
"~" => "", "–" => "-", "'" => "'", " " => " ");
$str = str_replace(array_keys($invalid), array_values($invalid), $str);
$remove = array("\n", "\r\n", "\r");
$str = str_replace($remove, "\\n", trim($str));
//$str = htmlentities($str, ENT_QUOTES);
return htmlspecialchars($str);
}
echo normalize_str($lst['address']);
PHP 4에서 json_encode(PHP 5에서 사용 가능)를 에뮬레이트하기 위한 클래스를 만들다가 이 문제가 발생했습니다.제가 생각해낸 것은 다음과 같습니다.
class jsonResponse {
var $response;
function jsonResponse() {
$this->response = array('isOK'=>'KO', 'msg'=>'Undefined');
}
function set($isOK, $msg) {
$this->response['isOK'] = ($isOK) ? 'OK' : 'KO';
$this->response['msg'] = htmlentities($msg);
}
function setData($data=null) {
if(!is_null($data))
$this->response['data'] = $data;
elseif(isset($this->response['data']))
unset($this->response['data']);
}
function send() {
header('Content-type: application/json');
echo '{"isOK":"' . $this->response['isOK'] . '","msg":' . $this->parseString($this->response['msg']);
if(isset($this->response['data']))
echo ',"data":' . $this->parseData($this->response['data']);
echo '}';
}
function parseData($data) {
if(is_array($data)) {
$parsed = array();
foreach ($data as $key=>$value)
array_push($parsed, $this->parseString($key) . ':' . $this->parseData($value));
return '{' . implode(',', $parsed) . '}';
}
else
return $this->parseString($data);
}
function parseString($string) {
$string = str_replace("\\", "\\\\", $string);
$string = str_replace('/', "\\/", $string);
$string = str_replace('"', "\\".'"', $string);
$string = str_replace("\b", "\\b", $string);
$string = str_replace("\t", "\\t", $string);
$string = str_replace("\n", "\\n", $string);
$string = str_replace("\f", "\\f", $string);
$string = str_replace("\r", "\\r", $string);
$string = str_replace("\u", "\\u", $string);
return '"'.$string.'"';
}
}
저는 여기에 언급된 규칙을 지켰습니다.저는 필요한 것만 사용했는데, 사용하시는 언어로 필요에 맞게 사용하실 수 있을 것 같습니다.내 경우 문제는 내가 처음에 생각했던 것처럼 새로운 라인에 관한 것이 아니라 탈출하지 못하는 것에 관한 것이었다.제가 뭘 잘못했는지 다른 사람이 제가 겪었던 작은 두통에서 벗어나길 바랍니다.
복사 수 있기 이 을 직접 하여 j j j j j j j j j j j j j j j j j j, JSON j j j as as as as as as as as as as as as as에 복사해 .JSON을 코드에 직접 복사하여 붙여넣을 수 있기 때문입니다.JSON, JSON, JSON, JSON, JSON, JSON, JSON, JSON.dataObj 않은 " " " " " " " " " ) 。eval==evil
var dataObj = {"count" : 1, "stack" : "sometext\n\n"};
console.log(dataObj);
언급URL : https://stackoverflow.com/questions/42068/how-do-i-handle-newlines-in-json
'source' 카테고리의 다른 글
| PHP에서 HTML/XML을 어떻게 해석하고 처리합니까? (0) | 2023.01.06 |
|---|---|
| MYSQL의 LIMIT 값이 클수록 쿼리가 느려지는 이유는 무엇입니까? (0) | 2023.01.06 |
| 여러 콘텍스트 매니저에 "with" 블록을 생성하시겠습니까? (0) | 2023.01.06 |
| API를 이용하여 인스타그램에 사진을 올리는 방법 (0) | 2023.01.06 |
| 비동기 화살표 함수의 구문 (0) | 2023.01.06 |