@@ -494,20 +494,15 @@ private JSONObject getObject(String parentPath, final QueryConfig parentConfig,
494494 && isInRelationMap (path ) == false ) {
495495 return request ;
496496 }
497+ //优化查询性能并避免"[]":{"0":{"1":{}}}这种导致第3层当成[]的直接子Object
498+ final boolean isArrayChild = parentConfig != null && StringUtil .isNumer (name ) && ("" + parentConfig .getPosition ()).equals (name );
497499
498- boolean nameIsNumber = StringUtil .isNumer (name );
499500 String table = Pair .parseEntry (name , true ).getKey ();
500501 Log .d (TAG , "getObject table = " + table );
501502
502- QueryConfig config = nameIsNumber ? parentConfig : null ;
503- if (config == null ) {
504- config = new QueryConfig (requestMethod , table ).setCount (1 );
505- }
506- //避免"[]":{"0":{"1":{}}}这种导致第3层当成[]的直接子Object
507- if (nameIsNumber && ("" + config .getPosition ()).equals (table ) == false ) {
508- config .setPosition (0 ).setCount (1 ).setPage (0 );
509- }
510-
503+
504+
505+
511506 boolean containRelation = false ;
512507
513508 JSONObject transferredRequest = new JSONObject (true );//must init
@@ -530,11 +525,11 @@ && isInRelationMap(path) == false) {
530525
531526 if (value instanceof JSONObject ) {//JSONObject,往下一级提取
532527 if (isArrayKey (key )) {//APIJSON Array
533- result = getArray (path , config , key , (JSONObject ) value );
528+ result = getArray (path , parentConfig , key , (JSONObject ) value );
534529 } else {//APIJSON Object
535- result = getObject (path , isFirst == false || nameIsNumber == false //[]里第一个不能为[]
536- ? null : config , key , (JSONObject ) value );
537- isFirst = false ;
530+ result = getObject (path , isArrayChild == false || isFirst == false //以第0个JSONObject为准
531+ ? null : parentConfig , key , (JSONObject ) value );
532+ isFirst = false ;//[]里第一个不能为[]
538533 }
539534 Log .i (TAG , "getObject key = " + key + "; result = " + result );
540535 if (result != null && result .isEmpty () == false ) {//只添加!=null的值,可能数据库返回数据不够count
@@ -659,15 +654,17 @@ && isInRelationMap(path) == false) {
659654 if (parseRelation == false || isInRelationMap (path )) {//避免覆盖原来已经获取的
660655 query = true ;
661656 // keyValuePathMap.remove(path);
662- QueryConfig config2 = newQueryConfig (table , transferredRequest );
657+ QueryConfig config = newQueryConfig (table , transferredRequest );
663658
664- if (parentConfig != null ) {
665- config2 .setCount (parentConfig .getCount ()).setPage (parentConfig .getPage ())
659+ if (parentConfig == null ) {//导致全部都是第0个 || isArrayChild == false) {
660+ config .setCount (1 );
661+ } else {
662+ config .setCount (parentConfig .getCount ()).setPage (parentConfig .getPage ())
666663 .setPosition (parentConfig .getPosition ());//避免position > 0的object获取不到
667664 }
668665
669666 try {
670- transferredRequest = getSQLObject (config2 );
667+ transferredRequest = getSQLObject (config );
671668 } catch (Exception e ) {
672669 Log .e (TAG , "getObject try { transferredRequest = getSQLObject(config2); } catch (Exception e) {" );
673670 if (e instanceof NotExistException ) {//非严重异常,有时候只是数据不存在
@@ -717,7 +714,7 @@ && isInRelationMap(path) == false) {
717714
718715 /**获取对象数组,该对象数组处于parentObject内
719716 * @param parentPath parentObject的路径
720- * @param parentConfig parentObject对子object的SQL查询配置
717+ * @param parentConfig parentObject对子object的SQL查询配置,需要传两个层级
721718 * @param name parentObject的key
722719 * @param request parentObject的value
723720 * @return 转为JSONArray不可行,因为会和被当成条件的key:JSONArray冲突。好像一般也就key{}:JSONArray用到??
0 commit comments