注意:这个问题已被重新措辞,以便更清楚地了解我需要帮助的内容。
我在文本文件中有这个:
[[0.0, 0.0, 1], [32.0, 0.0, 1], [64.0, 0.0, 1], [96.0, 0.0, 1], [128.0, 0.0, 1]]
我通过执行以下操作将其加载为字符串:
public void loadWorld()
{
FileHandle path = Gdx.files.local("saves/tileList.txt");
String tmpString = path.readString(null);
List<String> tmpList = new ArrayList<String>(Arrays.asList(tmpString.split("],")));
System.out.println(tmpString);
}
返回此内容:
[[[0.0, 0.0, 1, [32.0, 0.0, 1, [64.0, 0.0, 1, [96.0, 0.0, 1, [128.0, 0.0, 1]]]
有什么方法可以把字符串转换成嵌入的字符串列表吗?
e.g。在加载文本后的python中,您可以使用ast.literal_eval(tmpString)
我可以使用Java等价物吗?
这是保存功能:
public void saveWorld()
{
FileHandle path = Gdx.files.local("saves/tileList.txt");
List<List<String>> tmpArray = new ArrayList<List<String>>();
List<String> tmpList = new ArrayList<String>();
for (Tile t: tiles)
{
tmpList = new ArrayList<String>();
tmpList.add(String.valueOf(t.getX()));
tmpList.add(String.valueOf(t.getY()));
tmpList.add(String.valueOf(t.getType()));
tmpArray.add(tmpList);
path.writeString(String.valueOf(tmpArray) + "\n", false);
}
path = Gdx.files.local("saves/itemList.txt");
tmpArray = new ArrayList<List<String>>();
for (Item i: items)
{
tmpList = new ArrayList<String>();
tmpList.add(String.valueOf(i.getX()));
tmpList.add(String.valueOf(i.getY()));
tmpList.add(String.valueOf(i.getType()));
tmpList.add(String.valueOf(i.getIsCollected()));
tmpArray.add(tmpList);
path.writeString(String.valueOf(tmpArray), false);
}
path = Gdx.files.local("saves/spriteList.txt");
tmpArray = new ArrayList<List<String>>();
for (Sprite s: sprites)
{
tmpList = new ArrayList<String>();
tmpList.add(String.valueOf(s.getX()));
tmpList.add(String.valueOf(s.getY()));
tmpList.add(String.valueOf(s.getHealth()));
tmpList.add(String.valueOf(s.getMaxHealth()));
tmpList.add(String.valueOf(s.getMana()));
tmpList.add(String.valueOf(s.getMaxMana()));
tmpList.add(String.valueOf(s.getSpeed()));
tmpList.add(String.valueOf(s.getArmour()));
tmpList.add(String.valueOf(s.getDamage()));
tmpList.add(String.valueOf(s.getHealthRegenRate()));
tmpList.add(String.valueOf(s.getManaRegenRate()));
tmpArray.add(tmpList);
path.writeString(String.valueOf(tmpArray), false);
}
}
答案 0 :(得分:0)
以下是使用Jackson将嵌套列表序列化为json的示例:
import java.util.ArrayList;
import java.util.List;
class EmbeddedList
{
private List<List<Double>> list = new ArrayList<>();
public List<List<Double>> getList()
{
return list;
}
}
和序列化器:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
public class EmbeddedListSerializer
{
public static void main(String[] args)
{
EmbeddedList saveMe = new EmbeddedList();
List<Double> firstList = new ArrayList<>();
firstList.add(0.0);
firstList.add(0.0);
firstList.add(1d);
List<Double> secondList = new ArrayList<>();
secondList.add(32.0);
secondList.add(0.0);
secondList.add(1d);
List<Double> thirdList = new ArrayList<>();
thirdList.add(64.0);
thirdList.add(0.0);
thirdList.add(1d);
saveMe.getList().add(firstList);
saveMe.getList().add(secondList);
saveMe.getList().add(thirdList);
EmbeddedListSerializer serializer = new EmbeddedListSerializer();
serializer.saveJson(saveMe);
EmbeddedList loaded = serializer.loadJson();
for( List<Double> subList : loaded.getList() )
{
for( Double d : subList )
{
System.out.println( d );
}
}
}
public void saveJson( EmbeddedList embeddedList )
{
ObjectMapper mapper = new ObjectMapper();
try
{
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(embeddedList);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("list.json"));
PrintWriter out = new PrintWriter(outputStreamWriter);
PrintWriter writer = new PrintWriter(out);
writer.print(json);
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private EmbeddedList loadJson()
{
EmbeddedList list = null;
try
{
ObjectMapper mapper = new ObjectMapper();
File file = new File("list.json");
list = mapper.readValue( file, EmbeddedList.class );
}
catch( IOException e )
{
e.printStackTrace();
}
return list;
}
}
将数据存储为:
{
"list" : [ [ 0.0, 0.0, 1.0 ], [ 32.0, 0.0, 1.0 ], [ 64.0, 0.0, 1.0 ] ]
}
如果你愿意,可以在EmbeddedList对象中更改Double to Number,然后将双精度序列化为double,ints为int。