我正在尝试通过将row_num分配给每个键值对来对JSON中的记录进行分组。我是Java新手,所以有人可以解释我在做什么错。
当前结果:
AHFS:[]:0
Action:"":1
AdminInstructions:"Take 2 capsules by mouth daily":2
AHFS:["28:08.04.92"]:0
Id:"101":1
Name:"Office Visit":2
EncounterType:{"Id":"101","Name":"Office Visit"}:1
MedicationOrders:[{"AHFS":[],"Action":"","AdminInstructions":"Take 2 capsules `by mouth daily"},{"AHFS":["28:08.04.92"],"EncounterType":{"Id":"101","Name":"Office Visit"}}]:0`
预期结果:
AHFS:[]:0
Action:"":0
AdminInstructions:"Take 2 capsules by mouth daily":0
AHFS:["28:08.04.92"]:1
Id:"101":1
Name:"Office Visit":1
EncounterType:{"Id":"101","Name":"Office Visit"}:1
MedicationOrders:[{"AHFS":[],"Action":"","AdminInstructions":"Take 2 capsules `by mouth daily"},{"AHFS":["28:08.04.92"],"EncounterType":{"Id":"101","Name":"Office Visit"}}]:0`
代码:
import java.util.Map;
import java.util.Set;
import com.google.gson.*;
import com.google.gson.JsonElement;
import java.util.Iterator;
import java.util.ArrayList;
import org.json.*;
public class JsonParsing {
static JsonParser parser = new JsonParser();
public static void createHashMapFromJsonString(String json, int row_num)
{
JsonElement object = (JsonElement) parser.parse(json);
Set<Map.Entry<String, JsonElement>> set = (object.getAsJsonObject()).entrySet();
Iterator<Map.Entry<String, JsonElement>> iterator = set.iterator();
ArrayList<String> map = new ArrayList<String>();
while (iterator.hasNext())
{
Map.Entry<String, JsonElement> entry = iterator.next();
String key = entry.getKey();
JsonElement value = entry.getValue();
if (null != value)
{
if (!value.isJsonPrimitive())
{
if (value.isJsonObject())
{
createHashMapFromJsonString(value.toString(), row_num);
}
else if (value.isJsonArray() && value.toString().contains(":"))
{
ArrayList<String> list = new ArrayList<>();
JsonArray array = value.getAsJsonArray();
if (null != array)
{
for (JsonElement element : array)
{
if (!element.isJsonPrimitive()) {
createHashMapFromJsonString(element.toString(), row_num);
}else{
list.add(element.toString());
}
}
map.add(key+list);
}
}
else if (value.isJsonArray() && !value.toString().contains(":"))
{
map.add(key+value.getAsJsonArray());
}
}
else
{
map.add(key+value.getAsString());
}
}
map.add(key+value.toString());
System.out.println(key+":"+value+":"+row_num);
row_num++;
}
}
public static void main(String args[])
{
String json_input = "{\"MedicationOrders\":[{\"AHFS\":[],\"Action\":\"\",\"AdminInstructions\":\"Take 2 capsules by mouth daily\"},{\"AHFS\":[\"28:08.04.92\"],\"EncounterType\":{\"Id\":\"101\",\"Name\":\"Office Visit\"}}]}";
int row_num = 0;
if(json_input.trim().charAt(0) == '[')
{
try
{
JSONArray jsonArray = new JSONArray(json_input);
for (int i = 0; i < jsonArray.length(); i++)
{
JSONObject jsonobject = jsonArray.getJSONObject(i);
String json = jsonobject.toString();
createHashMapFromJsonString(json,row_num);
row_num++;
}
}
catch (JSONException e)
{
}
}
else
{
createHashMapFromJsonString(json_input,row_num);
}
}
}