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'])