2016-12-01 1 views
3

나는 몇 가지 속성을 가진 JSON을 생성해야 그 중 하나는 base64로 문자열입니다 :Node JS, JSON 문자열에 Base64 String을 올바르게 저장하는 방법은 무엇입니까?

{"password":"123456","key":"MIIIhQIBAzCCCD8GCSqGSIb3DQEHAaCCCDAEgggsMIAwgAYJKoZIhvcNA 
    QcBoIAEggEOMIIBCjCCAQYGCyqGSIb3DQEMCgECoG4wbDAoBgoqhkiG9w0BDAEDMBoEFOWB9Rf4cT/NBObHUQW6sCOtB2AbAgIEAARAfTkFJwD66tZ2p30iXGLNtyH41D4RlWSof/MJ3w91rU22sQmCZkRR7UzgOlaoFWggWB2a2FHYOMpNjRbm+d 
    9+hjGBhjAjBgkqhkiG9w0BCRUxFgQU5W/loImfeHgVra9dJW2noKcMLBMwXwYJKoZIhvcNAQkUMVIeUABlADUANgBmAGUANQBhADAAOAA5ADkAZgA3ADgANwA4ADEANQBhAGQAYQBmADUAZAAyADUANgBkAGEANwBhADAAYQA3ADAAYwAyAGMAMQA 
    zAAAAADCABgkqhkiG9w0BBwaggDCAAgEAMIAGCSqGSIb3DQEHATAoBgoqhkiG9w0BDAEGMBoEFPOj+9YztiaevvtCfZthUx6+uv27AgIEAKCABIIGqHs+siCvaxABhn/GgVGEfZ/SYJN/wBszCjJDpyiv1dO1c3Ty3yPzxzqCwpvYvZcXLpzc6Xa6 
    v90tmrml63zIOwPyDSKqZ0nSC8fL+jqMRXArUYlDoP+TK39OknfPEhhjLmJOqY2jboRvsDXaOggu0g7VOhx4vG6e/nj8LjFgEQEzoqF5wxg/RTx5yNvnK3oUPocbKUjSgJ1qj26vJUk3vXNTGjks9ltswRZA5up+b+3bzx5Cy/gCU/U96bw3u+8Ei 
    p0NdtEsXzx5SmD70E85HPyPg7NAk7qrliy16MdJHKzN9gSDl6UDtLKNFPXvDPAjAkSPwKt1qp0SEn+aZ+BADIk2TYZDTRFxGD6ym9+mwBzSsBoJ5kojmyF3F2CJCQzjyEs2moCCV32sgHJ59k3C1DOGD4b2TNxRKm4U0hjpdXqjv2orPDpkvniejJ 
"} 

난 그냥 내 base64로의 마지막 부분을 건너 뛴 :

var file = fs.readFileSync('myfile'); 
var request = { password: '123456', key: file.toString('base64')}; 
console.log(JSON.stringify(request)); 

그것은 나에게 JSON의 종류를 출력 이 질문에 문자열.

JSON 문자열을 생성했으며 유효하지 않습니다. 왜냐하면 base64 문자열에 구조에 이중 백 슬래시가 있기 때문입니다.

base64 속성을 사용하여 JSON 문자열을 올바르게 생성하는 방법은 무엇입니까?

내 생성 된 64 기수는 다음과 같습니다

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 

그리고 여기에 무엇을 검증 말한다 :

json

+0

가 base64String 충분해야한다 (슬래시 VS 슬래시) 아래의 2 개 개의 결과의 차이를 알 백 슬래시를 사용할 수 없습니다. – xShirase

+0

@xShirase'SYNJNYU/zIa // Zu3O3bp + XwH' 문자를 가지며,'//'는 json을 무효로 만듭니다. –

+0

@ Mr.D ['/'= (앞) 슬래시] (https://en.wikipedia.org/wiki/Slash_ (구두점)), ['\'= 백 슬래시] (https : //en.wikipedia. org/wiki/Backslash) – RicoBrassers

답변

0

당신의 접근 방식은 좋지만 Base64 문자열에는 백 슬래시를 사용할 수 없으며 나머지는 이스케이프 처리됩니다.

Base64 index Table : 

0 A 16 Q 32 g 48 w 
1 B 17 R 33 h 49 x 
2 C 18 S 34 i 50 y 
3 D 19 T 35 j 51 z 
4 E 20 U 36 k 52 0 
5 F 21 V 37 l 53 1 
6 G 22 W 38 m 54 2 
7 H 23 X 39 n 55 3 
8 I 24 Y 40 o 56 4 
9 J 25 Z 41 p 57 5 
10 K 26 a 42 q 58 6 
11 L 27 b 43 r 59 7 
12 M 28 c 44 s 60 8 
13 N 29 d 45 t 61 9 
14 O 30 e 46 u 62 + 
15 P 31 f 47 v 63/

주어진 문자열

, 그것은 완벽하게 작동합니다 :
a={"password":"123456",key:"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"} 

이 screencap 보면, 당신이 당신의 문자열에 줄 바꿈을 가지고있는 것처럼 보이는, 그런 경우가 될 수 있을까? 여기서 손실이 있습니다 : http://prnt.sc/ddyq6y

+0

'data'는 이미'Buffer'입니다. – felixfbecker

+0

이 JSON을 무효로 만들고 같은 문자열을 생성했으며 거기에'//'가 일부 있습니다. JAVA를 사용하여이 문자열을 디코딩 했으므로 유효합니다.하지만 JSON 안에 배치하면 JSON이 유효하지 않게됩니다. –

+0

문자열을 게시 할 수 있습니까? // JSON을 유효하지 않게하지 않습니다 – xShirase

0

btoa(string)이 나를 위해 일한 사용 :

var string = 'Some string'; 

// Encoding 
var encodedString = btoa(string); 
console.log(encodedString); // out: "SGVsbG8gV29ybGQh" 

// Decoding 
var decodedString = atob(encodedString); 
console.log(decodedString); // out: "Some string" 

경우가 작동 할 수 다음과 같이 사용 :

var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}} 

// String 
var string = 'Some string'; 

// Encoding 
var encodedString = Base64.encode(string); 
console.log(encodedString); // out: "SGVsbG8gV29ybGQh" 

// Decoding 
var decodedString = Base64.decode(encodedString); 
console.log(decodedString); // Outputs: "some string" 

그런 다음 문자열을 Json에 저장할 수 있습니다.

0

JSON.stringify를 base64 텍스트 key: JSON.stringify(file.toString('base64'))에서 사용할 수 있습니다. 조심해. ,

var s="SYNJNYU/zIa//Zu3O3bp+XwH"; console.log(JSON.stringify(s)); 

출력

"SYNJNYU/zIa//Zu3O3bp+XwH" 

하지만

var s="SYNJNYU\zIa\\Zu3O3bp+XwH"; console.log(JSON.stringify(s)); 

출력

"SYNJNYUzIa\\Zu3O3bp+XwH" 
관련 문제