アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のようなjsonのテキストデータがあった場合、それを貼り付けたらキーの昇順でソートしてくれるサービスがあれば教えてください。
サービスがなくても簡単に実現できる方法でもかまいません。
どうぞ宜しくお願いいたします!m(_ _)m

------------------jsonデータ----------------------
{
"bbb": {
"c": "c",
"b": "b",
"a": "a"
},
"aaa":{
"b": "b",
"c": "c",
"a": "a"
}
}
}
-------------------------------------------------

↓のように並び変わってほしい
-------------------------------------------------
{
"aaa": {
"a": "a",
"b": "b",
"c": "c"
},
"bbb":{
"a": "a",
"b": "b",
"c": "c"
}
}
}
-------------------------------------------------

質問者からの補足コメント

  • すみません閉じカッコが一つ多いのはミスなので無視してくださいm(_ _)m

      補足日時:2022/08/05 20:49

A 回答 (2件)

下記のような HTML ファイルをブラウザで表示すれば実現できます



<!DOCTYPE html>
<form name=sortjson><p><textarea name=s></textarea><button type=submit>change</button></p><pre><output name=d></output></pre></form>
<script>
document.forms.sortjson.onsubmit = (event) => {
event.preventDefault();
function F(o) {
if (o == null || typeof o != 'object') return o;
if (o instanceof Array) return o.map(F);
return Object.keys(o).sort().reduce((p,v) => { p[v]=F(o[v]); return p}, new Object());
}
var el = event.target.elements;
try { el.d.value = JSON.stringify(F(JSON.parse(el.s.value)),null,2) }
catch (ex) { el.d.value = ex.toString() }
};
</script>
    • good
    • 0
この回答へのお礼

ありがとうございます。
サービスではありませんでしたが簡単に作成できる形に記載していただけたのでベストアンサーとさせていただきました。
ありがとうございます!

お礼日時:2022/08/08 02:11

こんばんは



オブジェクトの場合、keyの順序が問題になることはあまりないように思いますけれど・・・
(探してはいませんが、そのようなサービスがあるのかどうか・・)


ご質問がjavascriptのカテなので、javascriptで良いのでしょうか?
(他言語でも、同様と思いますが)
扱いやすいように、一旦オブジェクト化して並べ替え、テキスト化するのが簡単だと思います。

以下では、keyでソートする関数を作成しておいて、必要な回数だけ呼び出す方法です。
ご参考にでもなれば・・
(確認出力は、とりあえずconsoleにしてあります)

const sourceText = `{
"bbb": { "c": "c", "b": "b", "a": "a" },
"aaa": { "b": "b", "c": "c", "a": "a" }
}`;

const keySort = o =>{
const op = Object.entries(o);
op.sort( (a, b) => a[0]==b[0]?0:a[0]>b[0]?1:-1);
return Object.fromEntries(op);
};
const obj = keySort(JSON.parse(sourceText));
for (const k in obj) obj[k] = keySort(obj[k]);


console.log(sourceText); // 元テキストデータ
console.log(JSON.stringify(obj)); // ソート後テキスト
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!