質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

23499閲覧

JSONのダブルクォーテーションをReplaceしたいですがうまくできません。

lovelydai

総合スコア38

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2017/12/12 02:27

編集2017/12/12 02:29

こんにちは、3日目解決できずすごく困っています。

したいことは、DBにあるデータをCSVファイルに書き出したく、DB1つからエクスポート機能はできています。
問題は、DBが複数の場合ですが、JSONを作ってそのままCSVファイルに入れる仕様になっています。
例えば、RoomとRoom_assign,Room_equipmentという3つのテーブルからデータを持ってきたら、こんな感じのJSONを作り、それをコンマ区切りでCSVファイルにしたいです。
ここで、ダブルクォーテーションがある場合、それをまたダブルクォーテーションで囲んで、Room_assignとRoom_equipmentはCSVでは一つの文字列みたいに入れたいです。

JSON

1""1"",""2017"",""TEST"", 2"{""room_assign"":[{""week_idx"":""1"",""period_idx"":""1""},{""week_idx"":""2"",""period_idx"":""2""}]}", 3"{""room_equipment"":[{""equipment_idx"":""1""},{""equipment_idx"":""2""}]}", 4""Null"",""Null""

しかし、どうしてもダブルクォーテーションが一つしかつかないので、現在はこんな感じになっています。
room_assignとroom_equipmentオブジェクト内の全ての「”」を「””」に変えればよさそうですが、どうすればいいしょうか?もしくは、JSON.Stringifyのオプションreplacer等で処理する方法もあり得ますか?(色々やってみましたが、keyの値を修正するとエラーでしたし、replacerで変えたら、「/"」 がついてしまいます。)

Javascript

1""1"",""2017"",""TEST"", 2"{"room_assign":[{"week_idx":"1","period_idx":"1"},{"week_idx":"2","period_idx":"2"}]}", 3"{"room_equipment":[{"equipment_idx":"1"},{"equipment_idx":"2"}]}", 4""Null"",""Null""

現在、問題のコードを以下に添付します。

Javascript

1 for(var key in data.result.rooms) 2 { 3 contents[key] = []; //配列の要素数を指定する 4 // オブジェクト値を文字列に変換する。 5 6 var room_idx = data.result.rooms[key].room_idx; 7 var year = data.result.rooms[key].year; 8 var customer_idx = data.result.rooms[key].customer_idx; 9 var room_code = data.result.rooms[key].room_code; 10 var room_name = data.result.rooms[key].room_name; 11 var facility_idx = data.result.rooms[key].facility_idx; 12 var capacity = data.result.rooms[key].capacity; 13 var memo = data.result.rooms[key].memo; 14 var is_used = data.result.rooms[key].is_used; 15 var room_assign = []; 16 var room_equipment = []; 17 var deleter = data.result.rooms[key].deleter; 18 var deleted = data.result.rooms[key].deleted; 19 20 // loop room_assigns with _idxs 21 for(var assign_key in data.result.room_assigns) 22 { 23 var target_customer_idx = data.result.room_assigns[assign_key].customer_idx; 24 var target_year = data.result.room_assigns[assign_key].year; 25 var target_room_idx = data.result.room_assigns[assign_key].room_idx; 26 var week_idx = JSON.stringify(data.result.room_assigns[assign_key].week_idx); 27 var period_idx = JSON.stringify(data.result.room_assigns[assign_key].period_idx); 28 29 if(customer_idx === target_customer_idx && year === target_year && room_idx === target_room_idx) 30 { 31 room_assign.push({week_idx, period_idx}); 32 } 33 } 34 35 // ダブルクォーテーション処理要,"を””へ、または、Stringの場合””で囲むなどなど 36 var room_assign_parse = JSON.stringify({room_assign}); 37 38 // loop room_equipments with _idxs 39 for(var equipment_key in data.result.room_equipments) 40 { 41 var target_customer_idx = data.result.room_equipments[equipment_key].customer_idx; 42 var target_year = data.result.room_equipments[equipment_key].year; 43 var target_room_idx = data.result.room_equipments[equipment_key].room_idx; 44 var equipment_idx = JSON.stringify(data.result.room_equipments[equipment_key].equipment_idx); 45 46 if(customer_idx === target_customer_idx && year === target_year && room_idx === target_room_idx) 47 { 48 room_equipment.push({equipment_idx}); 49 } 50 } 51 52 var room_equipment_parse = JSON.stringify({room_equipment}); 53 54 // Insert values into contents array 55 contents[key].push(room_idx, year, customer_idx, room_code, room_name, facility_idx, capacity, memo, is_used, room_assign_parse_replace, room_equipment_parse_replace, deleter, deleted); 56 57 var room_parse = JSON.stringify(Object.values(contents[key]), 58 // Nullがある場合は、””に変える。 59 function(key, value) 60 { 61 if (value === null || value =='') 62 { 63 return '""'; 64 } 65 else if(Number.isFinite(value)) 66 { 67 return '"' + value + '"'; 68 } 69 else if(typeof value === 'string') 70 { 71 return '"' + value + '"'; 72 } 73 else if(typeof value === 'boolean') 74 { 75 return '"' + value + '"'; 76 } 77 return value; 78 } 79 ); 80 // 文字列配列をJSONとして加工する。 81 contents[key] = JSON.parse(room_parse); 82 } 83 84 console.log("contents = ",contents); 85 86 // File APIのBlobのパラメータに投げるために形を整形する。 87 var csvContents = contents.map(function(l){return l.join(',')}).join('\r\n'); 88 console.log("cvsContents = ",csvContents);

何かいい方法がありましたらぜひ教えてください。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

defghi1977

2017/12/12 02:39

おっしゃっていることが全く見えてきません. 必要としているCSVのフォーマット定義, そのCSVを生成するために必要となるJSONの対応等を整理して下さい.(JSONデータをカンマ区切りのCSVにしたい?)
lovelydai

2017/12/12 03:00

質問ありがとうございます。自己解決しました。
defghi1977

2017/12/12 03:03

なお, 自己解決した場合もどのように解決したかを(自分で)回答して下さい.
guest

回答1

0

自己解決

自己解決しました。
stringifyで生成されたJSON文字列にReplaceを以下のようにしたら、上手く行きました。

Javascript

1var room_equipment_parse = JSON.stringify({room_equipment}).replace(/\"/g, '\"\"');

投稿2017/12/12 03:02

lovelydai

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問