下面的代码是一个字符串(恰好是JSON) - 将其转换为JSONObject,然后迭代数据。 JSON具有模式(列)和数据。我的最终目标是将每个项目链接起来然后放入地图。
当每个项目不同时,这非常有效,如下所示:
String jsonSTR = "{\"schema\":[\"col1\",\"col2\",\"col3\"],\"data\":[[\"banana\",\"1\",face],[\"orange\",\"2\",\"foot\"],[\"apple\",\"3\",\"hand\"]]}";
输出
{banana=col1, orange=col1, 1=col2, apple=col1, face=col3, 2=col2, 3=col2, foot=col3, hand=col3}
但引入了第二个重复项(包含在下面的代码中)我最终覆盖了值。我尝试将输入的值切换到列表中,但存在同样的问题。
我要么使用错误的容器来保存这些数据,要么我错误地使用它们。我认为LISTS可能会重复。
这是我目前的代码:
import org.json.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
ArrayList<String> schemaList = new ArrayList<>();
List<Map<String, Object>> allData = new ArrayList<Map<String, Object>>();
Map<String,Object> partData = new HashMap<String, Object>();
String jsonSTR = "{\"schema\":[\"col1\",\"col2\",\"col3\"],\"data\":[[\"banana\",\"orange\",2],[\"face\",\"arm\",\"eye\"],[\"yes\",\"no\",\"no\"]]}";
JSONObject jsonObj = new JSONObject(jsonSTR);
//Getting schema
JSONArray schema = jsonObj.getJSONArray("schema");
for (int i = 0; i < schema.length(); i++)
{
schemaList.add(schema.get(i).toString());
}
//Getting data
JSONArray data = jsonObj.getJSONArray("data");
for (int j = 0; j < data.length(); j++)
{
JSONArray row = data.getJSONArray(j);
for (int k = 0; k < row.length(); k++)
{
partData.put(schema.get(k).toString(),row.get(k));
allData.add(partData);
}
}
System.out.println(allData.get(0));
System.out.println(allData.get(1));
}
}
答案 0 :(得分:0)
如果数据必须在带有密钥的地图中,那么任何列都不能重复数据,因此它不是最佳解决方案。
public static Map<String, List<String>> toMap(String jsonSTR) {
Map<String, List<String>> result = new HashMap<>();
JSONObject jsonObj = new JSONObject(jsonSTR);
JSONArray schema = jsonObj.getJSONArray("schema");
JSONArray data = jsonObj.getJSONArray("data");
for (int i = 0; i < schema.length(); i++) {
String key = schema.get(i).toString();
result.put(key, new ArrayList<>());
for (int j = 0; j < data.length(); j++)
result.get(key).add(((JSONArray)data.get(j)).get(i).toString());
}
return result;
}
在:
&#34; {\&#34;模式\&#34;:[\&#34; COL1 \&#34; \&#34; COL2 \&#34; \&#34; COL3 \& #34; \&#34; COL4 \&#34],\&#34;数据\&#34;:[[\&#34;香蕉\&#34; \&#34; 1 \ &#34; \&#34;面\&#34; \&#34;黑色\&#34],[\&#34;橙\&#34; \&#34; 2 \ &#34; \&#34;脚\&#34; \&#34;红色\&#34],[\&#34;苹果\&#34; \&#34; 3 \ &#34; \&#34;手\&#34; \&#34;黄色\&#34;]]}&#34;
输出:
{col4 = [黑色,红色,黄色],col2 = [1,2,3],col3 = [面部,脚部,手部],col1 = [香蕉,橙,苹果]}
您对此解决方案有何看法?