jsonによる文字列での改行の使用
Aug 24 2020
私はこのようなJSONを持っています:
{
"luid": 1,
"uid": 1,
"description": "Inside there are some buildings:\n- houses,\n- skyscrapers,\n- bridges",
"visible": 1
}
dartでjsonをフェッチするときは、すべてのフィールドを別々のゲッターに入れます。
UIで、説明フィールドをに印刷するとText、次のように表示されます。
Inside there are some buildings:\n- houses,\n- skyscrapers,\n- bridges
の代わりに:
Inside there are some buildings:
- houses,
- skyscrapers,
- bridges
コードは次のとおりです。
_respserver =
await cl.get('datacontents.json');
_analyzed = json.decode(utf8.decode(_respserver.bodyBytes));
Text(_analyzed['description'])
どうすれば修正できますか?
回答
3 ChristopherMoore Aug 24 2020 at 22:30
受信したJSON文字列を変更して、すべてを\n実際の改行文字に置き換えることができます。
現在の出力に基づいて、生の個別の文字\とn文字が隣り合っています。したがって、これを修正するには、これらのインスタンスをすべて見つけて、必要なものに置き換える必要があります。
最初に、のインスタンスを検索する必要があります\\\\n。これは複雑に見えるかもしれませんが、エスケープ文字を検討すると、生の\\nになります。これは、現在jsonに実際に含まれているものです。jsonデコーダーがこれを認識すると、先頭に円記号を付けてエスケープするため、改行文字は表示されず\n、出力にリテラルが表示されます。
望ましくないインスタンスを見つけたら、それを本当に必要なものに置き換える必要があります\\n。\n前に説明したように、これは生になります。次に、jsonデコーダーはこれを改行文字と見なし、デコードされた出力にそのように作成して、Textウィジェットに表示したときに目的の結果を導きます。
_respserver = await cl.get('datacontents.json');
String jsonRaw = utf8.decode(_respserver.bodyBytes);
jsonRaw = jsonRaw.replaceAll("\\\\n","\\n");//Find and replace undesirable instances here
_analyzed = json.decode(jsonRaw);
Text(_analyzed['description'])
デコード後に行うには、次のようにします。
_respserver = await cl.get('datacontents.json');
_analyzed = json.decode(utf8.decode(_respserver.bodyBytes));
_analyzed['description'] = _analyzed['description'].replaceAll("\\n" ,"\n");
Text(_analyzed['description'])