《山海经》的成书时代是个谜。最早提到《山海经》的是司马迁,其《史记·大宛列传》中说,《禹本纪》和《山海经》中的生物过于荒诞无稽,所以作史时不敢以为参考。
最早整理《山海经》的西汉刘歆,在其《上山海经表》中认为此书是三代时所作。他说:《山海经》这本书,产生于尧舜禹的时代……禹把天下划分成九州,写出了《山海经》。
其实,这种说法是靠不住的。理由是:其一,《山海经》中有很多地名是秦代才有的,如长沙与象郡。卷十八《海内经》中说:“南方苍梧之丘,苍梧之渊,其中有九疑山,舜之所葬,在长沙零陵界中。”卷十三《海内东经》:“沉水出象郡城西……郁水出象郡,而西南注南海……”长沙与象郡皆为秦始皇所设置的三十六郡之一。
其二,其中有夏启、周文王甚至春秋时代的事,如《海外西经》说夏启在大乐之野这个地方咏歌起舞。此书既为禹时所作,怎么会记叙夏启为帝王时之事?《海外南经》说周文王葬于狄山,《大荒西经》中提到西周之国,国君姓姬,是后樱的后代,这正是历史上的西周。
《大荒北经》中说:“有北齐之国,姜姓……”这正是西周建立后由姜太公担任第一任国君的齐国。所以清代学者批评说:《山海经》讲了很多商代的事,学者却以为夏禹是作者,真是荒谬。
其三,《山海经》中有很多观念是春秋战国才有的,德、义、礼、仁、信绝不是上古就有的道德观念。
山海经也反映了不少楚地的民俗、神话。比如楚辞中许多故事都和《山海经》中的神话相吻合,这在屈原天问中表现得尤为明显。另外,《山海经》也与战国时代的邹衍学派有关。按《史记·孟子荀卿列传》,邹衍之言荒诞不经,往往从眼前的小地方说起,然后推想到无限远处如海外的一些人们没有见过的东西。
例如他会先详说一些中原的名山大川、飞禽走兽、水土所产、珍稀物类,然后又说中原的九州,而中原以外还有九个中原那样大的地方,这也是个九州,外面有小海环绕,但那也仅仅是其中一州,像这样的州一共有九个,外面有大海环绕,再往外便是天地的边际。
像这般漫无边际、海阔天空的论述,往往使听者茫然,因此邹衍被称为“谈天衍”。而《山海经》所记的内容,与此颇有符合之处:如叙述各名山大川及所出产的鸟兽、植物、珍稀物类,这和邹衍学派的说法一致。
这样看来,《山海经》绝非传说中的禹、益所作,它的产生并非出自一人一时,而主要是由巴蜀、荆楚之人以及战国时代的邹衍学派等集体完成的,到西汉刘歆校书时才合在一起。