Есть ли какие-нибудь резервные слова для JSON в качестве КЛЮЧА?
моя структура Json
dimObject{String:String}
finalObject(String:dimObject}
Line1# JSONObject dimObject=new JSONObject()
Line2# dimObject.put("class",["A","B","c"]);
Line3# dimObject.put("name",["sam"]);
Line4# System.out.print("dimObject#"+dimObject.toString());
Line5# JSONObject finalObject=new new JSONObect();
Line6# finalObject("supplier",dimObject);
Line7# System.out.print("finalObject#"+finalObject.toString());
ВЫХОД:
dimObject#{"class":["A","B","c"],"name":["sam"]}
finalObject#{"supplier":{"name":["sam"]}}
Итак, проблема в том, почему мойJSON ведет себя странным образом.
Я не определил "класс" как имя переменной, это просто ключ.
Проблема в том, что если аргумент указан как, "класс" это ключ или резерв слово, затем как я успешно вставил в Line#2
, и если его может вставить в dimObject, то почему его не удалось вставить в finalObject .
Пожалуйста, помогите мне разгадать эту тайну
ТОЧНЫЙ КОД ::
public JSONObject getRequiredAttributesWithValues() {
List<UserConstraint> constraintList = new ArrayList<UserConstraint>();
Map<String, FactTableOptimizingInfo> factTableMap = MappingInfo.INSTANCE.
getFactTableUserNameToFactTableOptimizingInfoMap();
Map<String, DimensionTableInfo> dimTableMap = MappingInfo.INSTANCE.getDimTableRealNameToObjectMap();
JSONObject requiredAttributes = getRequiredAttributes();
JSONObject finalObject = new JSONObject();
for (Object dimName : requiredAttributes.keySet()) {
JSONObject dimObject = new JSONObject();
JSONArray colNames = requiredAttributes.getJSONArray((String) dimName);
for (Object colName : colNames) {
List<String> columnList = new ArrayList<String>();
String dimensionName = (String) dimName;
String columnName = (String) colName;
constraintList = new ArrayList<UserConstraint>();
for (FilterDataStructure filter : this.info.getGlobalFilterList()) {
if (filter.getDimName().equals(dimensionName)) {
if (filter.getColumnName().equals(columnName)) {
AtomicConstraint.ConstraintType type;
try {
Integer.parseInt(filter.getValue());
type = AtomicConstraint.ConstraintType.INTEGER_TYPE;
} catch (NumberFormatException e) {
type = AtomicConstraint.ConstraintType.STRING_TYPE;
}
UserConstraint constraint = new UserAtomicConstraint(dimensionName, columnName,
AtomicConstraint.getStringToOperator(filter.getOperator()),
filter.getValue(), type, factTableMap, dimTableMap);
constraintList.add(constraint);
}
}
}
columnList.add(columnName);
List<UserDimensionInfoToBuildQuery> dimList = new ArrayList<UserDimensionInfoToBuildQuery>();
UserTableAndColInfo groupByInfo = new UserTableAndColInfo(dimensionName, columnName);
ArrayList<UserTableAndColInfo> groupByInfoList = new ArrayList<UserTableAndColInfo>();
groupByInfoList.add(groupByInfo);
UserDimensionInfoToBuildQuery dim = new UserDimensionInfoToBuildQuery(dimensionName, columnList);
dimList.add(dim);
UserInfoToBuildQuery.Builder queryBuilder = new UserInfoToBuildQuery.Builder(dimList).
groupBy(groupByInfoList);
if (constraintList != null && !(constraintList.isEmpty())) {
if (constraintList.size() > 1) {
queryBuilder = queryBuilder.constraints(new UserComplexConstraint(constraintList,
ComplexConstraint.Joiner.AND));
} else {
queryBuilder = queryBuilder.constraints(constraintList.get(0));
}
}
List<Object> result = (List<Object>) DataAccessor.getData(queryBuilder.build());
if (result == null) {
continue;
}
JSONArray valueArray = new JSONArray();
for (Object row : result) {
List<Object> splitRow = (List<Object>) row;
valueArray.add(splitRow.get(0).toString());
}
dimObject.put(colName, valueArray);
}
finalObject.put(dimName, dimObject);
}
return finalObject;
}
}